1)NSLock
iOS中對于資源搶占的問題可以使用同步鎖NSLock來解決晕鹊,使用時把需要加鎖的代碼(以后暫時稱這段代碼為”加鎖代碼“)放到NSLock的lock和unlock之間,一個線程A進入加鎖代碼之后由于已經加鎖暴浦,另一個線程B就無法訪問溅话,只有等待前一個線程A執(zhí)行完加鎖代碼后解鎖,B線程才能訪問加鎖代碼歌焦。
2)@synchronized代碼塊
使用@synchronized解決線程同步問題相比較NSLock要簡單一些飞几,日常開發(fā)中也更推薦使用此方法。
3)使用GCD解決資源搶占問題
在GCD中提供了一種信號機制独撇,也可以解決資源搶占問題(和同步鎖的機制并不一樣)循狰。
4)擴展--控制線程通信
由于線程的調度是透明的,程序有時候很難對它進行有效的控制券勺,為了解決這個問題iOS提供了NSCondition來控制線程通信(同前面GCD的信號機制類似)绪钥。
5)iOS中的其他鎖
NSRecursiveLock :遞歸鎖,有時候“加鎖代碼”中存在遞歸調用关炼,遞歸開始前加鎖程腹,遞歸調用開始后會重復執(zhí)行此方法以至于反復執(zhí)行加鎖代碼最終造成死鎖,這個時候可以使用遞歸鎖來解決儒拂。使用遞歸鎖可以在一個線程中反復獲取鎖而不造成死鎖寸潦,這個過程中會記錄獲取鎖和釋放鎖的次數色鸳,只有最后兩者平衡鎖才被最終釋放。
NSDistributedLock:分布鎖见转,它本身是一個互斥鎖命雀,基于文件方式實現鎖機制,可以跨進程訪問斩箫。
pthread_mutex_t:同步鎖吏砂,基于C語言的同步鎖機制,使用方法與其他同步鎖機制類似乘客。
更多:iOS面試題合集