Я хочу, чтобы блокировка LockQueue2
для завершения процесса и при разблокировке LockQueue2
показать "number is:" number
in dispatch_after
.Заблокировать и разблокировать dispatch_queue_t в async task
мне нужен этот вывод:
число, установленное значение 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