//線程1
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
[lock lock];
[obj method1];
sleep(30);
[lock unlock];
});
//線程2
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
sleep(5);//以保證讓線程2的代碼後執行
[lock lock];
[obj method2];
[lock unlock];
});
總結
[lock lock];
[obj yourMethod];
[lock unlock];
我們稱[obj yourMethod]爲“關鍵部分”。
NSLock的執行原理:
某個線程A調用lock方法。這樣,NSLock將被上鎖。可以執行“關鍵部分”,完成後,調用unlock方法。
如果,在線程A 調用unlock方法之前,另一個線程B調用了同一鎖對象的lock方法。那麼,線程B只有等待。直到線程A調用了unlock。