相同點(diǎn)
都能保證同一時(shí)間內(nèi)只有一個(gè)線程訪問共享資源,都能保證線程安全不同點(diǎn)
互斥鎖:如果共享數(shù)據(jù)已經(jīng)有其他線程加鎖了,線程就會(huì)就如休眠狀態(tài)等待,一袋訪問的資源解鎖,則等待資源的線程立即執(zhí)行
自旋鎖:如果共享數(shù)據(jù)已經(jīng)有其他線程加鎖了,線程會(huì)以死循環(huán)的方式等待鎖,一單被訪問的資源被解鎖,則等待資源的線程會(huì)立即執(zhí)行
自旋鎖的效率高于互斥鎖
加了互斥鎖的代碼,當(dāng)新線程訪問時(shí),如果發(fā)現(xiàn)其他線程正在執(zhí)行鎖定的代碼,新線程就會(huì)進(jìn)行休眠
加了自旋鎖,當(dāng)新線程訪問代碼時(shí),如果發(fā)現(xiàn)有其他線程正在執(zhí)行鎖定的代碼,新線程就會(huì)死循環(huán)的方式,一直等待鎖定的代碼執(zhí)行完成,相當(dāng)于不停常識(shí)執(zhí)行代碼,比較消耗性能
nonatomic 非原子屬性,同一時(shí)間可以有很多線程讀和寫
atomic 原子屬性,同一時(shí)間只能有一個(gè)線程寫入,但可以有多個(gè)線程去取值,atomic本來就有一把鎖(自旋鎖)
atomic 線程安全,需要消耗大量資源
nonatomic 非線程安全,效率更高,一般使用nonatomic