我想在关键部分内同步调用完成处理程序(使用 @synchronized 块)。我正在尝试使用信号量等待完成处理程序,但从未调用信号量信号。
这是我正在做的事情:
NSNumber *lock = 0;
@synchronized(lock) {
// critical section code begins
dispatch_semaphore_t sema = dispatch_semaphore_create(0);
[self someMethodWithCompletionHandler:^(BOOL result) {
// execute completion handler
dispatch_semaphore_signal(sema);
}];
// wait for completion block to finish
dispatch_semaphore_wait(sema, DISPATCH_TIME_FOREVER);
// critical section code ends
}
我相信,由于 @synchronized 块,完成处理程序在与调用者相同的线程上被调用,这会导致死锁。那正确吗?如果是,还有什么方法可以实现?
谢谢!