Posted on 2007-08-03 13:03
寶杉 閱讀(3592)
評論(2) 編輯 收藏 引用 所屬分類:
C++
* 非遞歸鎖:非遞歸鎖提供互斥的一種高效的形式,它定義一個臨界區(qū),每一時刻只有單個線程可在其中執(zhí)行。它們之所以是非遞歸的,是因?yàn)楫?dāng)前擁有鎖的線程在將其釋放前不可以再次獲取它。否則,就會立即發(fā)生死鎖。SunOS 5.x通過它的mutex_t、rwlock_t,和sema_t類型(POSIX Pthreads不提供后兩種同步機(jī)制)為非遞歸鎖提供支持。ASX構(gòu)架提供Mutex、RW_Mutex,和Semaphore包裝,以分別封裝這些語義。
* 遞歸鎖:另外一方面,遞歸鎖允許acquire方法嵌套調(diào)用,只要當(dāng)前擁有該鎖的線程就是試圖重新獲取它的線程。遞歸鎖對于回調(diào)驅(qū)動的事件分派構(gòu)架(比如1.3.2描述的反應(yīng)堆)特別有用,在其中構(gòu)架的事件循環(huán)執(zhí)行對預(yù)登記的用戶定義的對象的回調(diào)。因?yàn)殡S后用戶定義的對象可能經(jīng)由它的方法入口重入分派構(gòu)架,必須使用遞歸鎖以防止在回調(diào)過程中構(gòu)架持有的鎖發(fā)生死鎖。