多線程的幾種鎖
OSSpinLock(自旋鎖鸟赫,等待鎖的線程會處于忙等狀態(tài)师郑,一直占用著CPU資源负芋,還會出現(xiàn)優(yōu)先級反轉(zhuǎn)的問題漫蛔,如果低優(yōu)先級的鎖先加鎖了嗜愈,等待鎖的線程優(yōu)先級較高旧蛾,它會一直占用著CPU資源,優(yōu)先級低的線程就無法釋放鎖蠕嫁。適用于簡單輕量級數(shù)據(jù)訪問的操作锨天,在sideTable源碼引用計(jì)數(shù)+1-1的那里看見過)
下面的都是互斥鎖,等待的時(shí)候會處于休眠狀態(tài)
os_unfair_lock
pthread_mutex
dispatch_semaphore
dispatch_queue(DISPATCH_QUEUE_SERIAL)
NSLock
NSRecursiveLock
NSCondition
NSConditionLock
@synchronized
兩種常用的讀寫鎖
pthread_rwlock:讀寫鎖
dispatch_barrier_async:異步柵欄調(diào)用
semaphore的底層原理
dispatch_semaphore_create()
struct semaphore {
int value;
List<thread>;
}
image.png
image.png
剃毒,