前言:一塊資源可能會(huì)被多個(gè)線程共享高每,也就是多個(gè)線程可能會(huì)訪問(wèn)同一塊資源屿岂,比如多個(gè)線程訪問(wèn)同一個(gè)對(duì)象、同一個(gè)變量鲸匿、同一個(gè)文件和同一個(gè)方法等爷怀。因此當(dāng)多個(gè)線程訪問(wèn)同一塊資源時(shí),很容易會(huì)發(fā)生數(shù)據(jù)錯(cuò)誤及數(shù)據(jù)不安全等問(wèn)題带欢。因此要避免這些問(wèn)題运授,我們需要使用“線程鎖”來(lái)實(shí)現(xiàn)。
本文主要論述IOS創(chuàng)建鎖的方法總結(jié)乔煞,如果大家對(duì)多線程編程技術(shù)這一塊不熟悉吁朦,我建議你們先去看我的另一篇文章”iOS開(kāi)發(fā)-多線程編程技術(shù)(Thread、Cocoa operations渡贾、GCD)“
一逗宜、使用關(guān)鍵字
1)@synchronized(互斥鎖)
優(yōu)點(diǎn):使用@synchronized關(guān)鍵字可以很方便地創(chuàng)建鎖對(duì)象,而且不用顯式的創(chuàng)建鎖對(duì)象剥啤。
缺點(diǎn):會(huì)隱式添加一個(gè)異常處理來(lái)保護(hù)代碼锦溪,該異常處理會(huì)在異常拋出的時(shí)候自動(dòng)釋放互斥鎖。而這種隱式的異常處理會(huì)帶來(lái)系統(tǒng)的額外開(kāi)銷府怯,為優(yōu)化資源刻诊,你可以使用鎖對(duì)象。
二牺丙、“Object-C”語(yǔ)言
1)NSLock(互斥鎖)
2)NSRecursiveLock(遞歸鎖)
條件鎖则涯,遞歸或循環(huán)方法時(shí)使用此方法實(shí)現(xiàn)鎖,可避免死鎖等問(wèn)題冲簿。
3)NSConditionLock(條件鎖)
使用此方法可以指定粟判,只有滿足條件的時(shí)候才可以解鎖。
4)NSDistributedLock(分布式鎖)
在IOS中不需要用到峦剔,也沒(méi)有這個(gè)方法档礁,因此本文不作介紹,這里寫(xiě)出來(lái)只是想讓大家知道有這個(gè)鎖存在吝沫。
如果想要學(xué)習(xí)NSDistributedLock的話呻澜,你可以創(chuàng)建MAC OS的項(xiàng)目自己演練,方法請(qǐng)自行Google惨险,謝謝羹幸。
三、C語(yǔ)言
1)pthread_mutex_t(互斥鎖)
2)GCD-信號(hào)量(“互斥鎖”)
3)pthread_cond_t(條件鎖)
簡(jiǎn)單總結(jié):
一般來(lái)說(shuō)辫愉,如果項(xiàng)目不大栅受,我們都會(huì)偷點(diǎn)懶,直接使用關(guān)鍵字@synchronized建立鎖,懶人方法屏镊。其次可以使用蘋(píng)果提供的OC方法依疼,最后才會(huì)去使用C去建立鎖。
本文參考文章:
iOS多線程開(kāi)發(fā)(四)---線程同步
Objective-C中不同方式實(shí)現(xiàn)鎖(一)
信號(hào)量與互斥鎖
轉(zhuǎn)載::http://www.cnblogs.com/GarveyCalvin/p/4212611.html