我想鎖LockQueue2
完成過程,當解鎖LockQueue2
顯示「號碼是:」number
在dispatch_after
。鎖定和解鎖dispatch_queue_t異步任務
我需要這樣的輸出:
數設置值1
數爲1
數設置值2
數爲2
數設定值3
數爲3
let LockQueue = dispatch_queue_create("LockQueue", nil)
func test(num :Int){
var number = 0
let LockQueue2 = dispatch_queue_create("LockQueue2", nil)
dispatch_async(LockQueue){
LockQueue2.lock()
// any process or waiting
sleep(2)
dispatch_sync(LockQueue2) {
number = num
print("number set value ", number)
LockQueue2.unlock()
}
}
dispatch_async(dispatch_get_global_queue(QOS_CLASS_BACKGROUND, 0)){
// any process or waiting
sleep(3)
dispatch_after(LockQueue2) {
print("number is :", number)//*** show number set in last dispatch ***
}
}
}
test(1)
test(2)
test(3)
如果你想在某個隨機線程上等待另一個線程的進程,你可能會使用信號量,而不是鎖。所以,創建一個信號量,讓第二個進程等待一個信號,然後讓第一個進程發出信號量。或使用串行隊列。 – Rob
謝謝親愛的@Rob,你能舉個例子嗎? – solan