性能最高的锁。
原理:
一直do while
忙等。
缺点:
当等待时会消耗大量 CPU
资源,所以它不适用于较长时间的任务。
优点:
对于内存缓存的存取来说,它非常合适。
OSSpinLock
已经出现了BUG
,导致并不能完全保证是线程安全的。苹果工程师已停用。
- dispatch_semaphore_t signal = dispatch_semaphore_create(1); //传入值必须 >=0, 若传入为0则阻塞线程并等待timeout,时间到后会执行其后的语句
- dispatch_semaphore_wait(signal, overTime):可以理解为 lock,会使得 signal值 -1
- dispatch_semaphore_signal(signal):可以理解为 unlock,会使得 signal值 +1
在Cocoa
程序中NSLock
中实现了一个简单的互斥锁,实现了NSLocking protocol
。
lock
,加锁
unlock
,解锁
tryLock
,尝试加锁,如果失败了,并不会阻塞线程,只是立即返回
NOlockBeforeDate:
,在指定的date
之前暂时阻塞线程(如果没有获取锁的话),如果到期还没有获取锁,则线程被唤醒,函数立即返回NO
//线程1
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
@synchronized (self) {
sleep(2);
NSLog(@"线程1");
}
});
//线程2
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
@synchronized (self) {
NSLog(@"线程2");
}
});