我想锁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