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