NSConditionLock

****NSConditionLock**** 對(duì)象所定義的互斥鎖可以在使得在某個(gè)條件下進(jìn)行鎖定和解鎖。它和 ****NSCondition**** 很像,但實(shí)現(xiàn)方式是不同的。
當(dāng)兩個(gè)線程需要特定順序執(zhí)行的時(shí)候,例如生產(chǎn)者消費(fèi)者模型,則可以使用 ****NSConditionLock**** 。當(dāng)生產(chǎn)者執(zhí)行執(zhí)行的時(shí)候,消費(fèi)者可以通過特定的條件獲得鎖,當(dāng)生產(chǎn)者完成執(zhí)行的時(shí)候,它將解鎖該鎖,然后把鎖的條件設(shè)置成喚醒消費(fèi)者線程的條件。鎖定和解鎖的調(diào)用可以隨意組合,****lock**** 和 ****unlockWithCondition****: 配合使用 ****lockWhenCondition:**** 和 ****unlock**** 配合使用。

- (void)producer {
  while (YES) {
       [self.conditionLock lock];
        NSLog(@"have something");         
        self.count++;         
        [self.conditionLock unlockWithCondition:1];     
  } 
} 

- (void)consumer {     
 while (YES) {         
  [self.conditionLock lockWhenCondition:1];         
  NSLog(@"use something");         
  self.count--;         
  [self.conditionLock unlockWithCondition:0];     
 } 
}

當(dāng)生產(chǎn)者釋放鎖的時(shí)候,把條件設(shè)置成了1。這樣消費(fèi)者可以獲得該鎖,進(jìn)而執(zhí)行程序,如果消費(fèi)者獲得鎖的條件和生產(chǎn)者釋放鎖時(shí)給定的條件不一致,則消費(fèi)者永遠(yuǎn)無法獲得鎖,也不能執(zhí)行程序。同樣,如果消費(fèi)者釋放鎖給定的條件和生產(chǎn)者獲得鎖給定的條件不一致的話,則生產(chǎn)者也無法獲得鎖,程序也不能執(zhí)行。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 引用自多線程編程指南應(yīng)用程序里面多個(gè)線程的存在引發(fā)了多個(gè)執(zhí)行線程安全訪問資源的潛在問題。兩個(gè)線程同時(shí)修改同一資源有...
    Mitchell閱讀 2,108評(píng)論 1 7
  • Java-Review-Note——4.多線程 標(biāo)簽: JavaStudy PS:本來是分開三篇的,后來想想還是整...
    coder_pig閱讀 1,761評(píng)論 2 17
  • 一、多線程 說明下線程的狀態(tài) java中的線程一共有 5 種狀態(tài)。 NEW:這種情況指的是,通過 New 關(guān)鍵字創(chuàng)...
    Java旅行者閱讀 4,849評(píng)論 0 44
  • 天氣已經(jīng)漸漸冷了下來,早上的時(shí)候已經(jīng)可以清晰的看到自己呼吸之間的氣息。這時(shí)節(jié)的天氣像極了家里的深秋,滿街或紅或黃的...
    貓果樹閱讀 360評(píng)論 2 1
  • 今天談到鬼故事的話題,想起許多年前在千島湖的經(jīng)歷,當(dāng)時(shí)非??膳?,現(xiàn)在回憶起來確實(shí)已體會(huì)到靈的世界。那是大約八年...
    宜然閱讀 392評(píng)論 0 0

友情鏈接更多精彩內(nèi)容