iOS——Objective C都有哪些鎖機制

cym_bj發表於2019-04-19

1)NSLock

iOS中對於資源搶佔的問題可以使用同步鎖NSLock來解決,使用時把需要加鎖的程式碼(以後暫時稱這段程式碼為”加鎖程式碼“)放到NSLock的lock和unlock之間,一個執行緒A進入加鎖程式碼之後由於已經加鎖,另一個執行緒B就無法訪問,只有等待前一個執行緒A執行完加鎖程式碼後解鎖,B執行緒才能訪問加鎖程式碼。

2)@synchronized程式碼塊

使用@synchronized解決執行緒同步問題相比較NSLock要簡單一些,日常開發中也更推薦使用此方法。

3)使用GCD解決資源搶佔問題

在GCD中提供了一種訊號機制,也可以解決資源搶佔問題(和同步鎖的機制並不一樣)。

4)擴充套件--控制執行緒通訊

由於執行緒的排程是透明的,程式有時候很難對它進行有效的控制,為了解決這個問題iOS提供了NSCondition來控制執行緒通訊(同前面GCD的訊號機制類似)。

5)iOS中的其他鎖

NSRecursiveLock :遞迴鎖,有時候“加鎖程式碼”中存在遞迴呼叫,遞迴開始前加鎖,遞迴呼叫開始後會重複執行此方法以至於反覆執行加鎖程式碼最終造成死鎖,這個時候可以使用遞迴鎖來解決。使用遞迴鎖可以在一個執行緒中反覆獲取鎖而不造成死鎖,這個過程中會記錄獲取鎖和釋放鎖的次數,只有最後兩者平衡鎖才被最終釋放。

NSDistributedLock:分佈鎖,它本身是一個互斥鎖,基於檔案方式實現鎖機制,可以跨程式訪問。

pthread_mutex_t:同步鎖,基於C語言的同步鎖機制,使用方法與其他同步鎖機制類似。

相關文章