* 非递归锁:非递归锁提供互斥的一种高效的形式,它定义一个临界区,每一时刻只有单个线程可在其中执行。 它们之所以是非递归的,是因为当前拥有锁的线程在将其释放前不可以再次获取它。否则,就会立即发生死锁。 SunOS 5.x 通过它的 mutex_t 、 rwlock_t ,和 sema_t 类型( POSIX Pthreads 不提供后两种同步机制)为非递归锁提供支持。 ASX 构架提供 Mutex 、 RW_Mutex ,和 Semaphore 包装,以分别 封装这些语义。
* 递归锁:另外一方面,递归锁允许 acquire 方法嵌套调 用,只要当前拥有该锁的线程就是试图重新获取它的线程。递归锁对于回调驱动的事件分派构架(比如 1.3.2 描述的反应堆) 特别有用,在其中构架的事件循环执行对预登记的用户定义的对象的回调。因为随后用户定义的对象可能经由它的方法入口重入分派构架,必须使用递归锁以防止在 回调过程中构架持有的锁发生死锁。