1.@synchronized
一般在創(chuàng)建單例對(duì)象的時(shí)候使用脸侥,多線程環(huán)境下創(chuàng)建線程是唯一的。
2.atomic
修飾屬性的關(guān)鍵字炉奴,對(duì)被修飾對(duì)象進(jìn)行原子操作(不負(fù)責(zé)使用)
@property(atomic) NSMutableArray *array;
//這樣保證線程的安全性
self.array = [NSMutableArray array];
//不能保證線程安全的
[self.array addObject:obj];
3.OSSpinLock(自旋鎖)
循環(huán)等待訪問(wèn),不釋放當(dāng)前資源媒鼓,用于輕量級(jí)數(shù)據(jù)訪問(wèn)(引用計(jì)數(shù)+1/-1操作)
4.NSLock(對(duì)象鎖)
-(void)A{
[lock lock];
[self B];
[lock unlock];
}
-(void)B{
[lock lock];
//操作邏輯
[lock unlock];
}
//導(dǎo)致死鎖
- 使用NSLock 對(duì)臨界區(qū)加鎖處理的時(shí)候,當(dāng)前某個(gè)線程調(diào)用lock之后,獲取得到鎖
- 到B方法后,同一把鎖又獲取了一次,導(dǎo)致了死鎖
//解決方案
通過(guò)遞歸鎖NSRecursiveLock
5.NSRecursiveLock(遞歸鎖)
-(void)A{
[recursiveLock lock];
[self B];
[recursiveLock unlock];
}
-(void)B{
[recursiveLock lock];
//操作邏輯
[recursiveLock unlock];
}
遞歸鎖的特點(diǎn)就是重入
6.dispatch_semaphore_t(信號(hào)量)
dispatch_semaphore_create(1);
dispatch_semaphore_wait(semaphore,DISPATCH_TIME_FOREVER);
dispatch_semaphore_signal(semaphore);