递归锁与非递归锁

   * 非递归锁:非递归锁提供互斥的一种高效的形式,它定义一个临界区,每一时刻只有单个线程可在其中执行。它们之所以是非递归的,是因为当前拥有锁的线程在将其释放前不可以再次获取它。否则,就会立即发生死锁。SunOS 5.x通过它的mutex_trwlock_t,和sema_t类型(POSIX Pthreads不提供后两种同步机制)为非递归锁提供支持。ASX构架提供MutexRW_Mutex,和Semaphore包装,以分别封装这些语义。

   * 递归锁:另外一方面,递归锁允许acquire方法嵌套调用,只要当前拥有该锁的线程就是试图重新获取它的线程。递归锁对于回调驱动的事件分派构架(比如 1.3.2 描述的反应堆)特别有用,在其中构架的事件循环执行对预登记的用户定义的对象的回调。因为随后用户定义的对象可能经由它的方法入口重入分派构架,必须使用递归锁以防止在回调过程中构架持有的锁发生死锁。

你可能感兴趣的:(递归锁与非递归锁)