当使用大于0的值创建信号量时,使用dispatch_semaphore_wait(..)时出现问题
sema = dispatch_semaphore_create(2);
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
//signals here
});
dispatch_semaphore_wait(sema, DISPATCH_TIME_FOREVER);
dispatch_release(sema);
等待不应该等待两个信号吗? 在上面的代码中,它根本不会等待,因此调用了释放,结果是崩溃!
答案 0 :(得分:6)
使用调度组而不是信号量来获取此行为。
在开始执行任务之前,通过调用dispatch_group_enter()
两次将组初始化为大小为2,dispatch_group_wait()
将在返回之前等待两次dispatch_group_leave()
的调用。
答案 1 :(得分:4)
不,这不是它的工作原理。线程将在第三次等待时阻塞,直到前两个中的一个发出信号。它是一个系统,用于指定一次可以访问资源的线程数。更多信息here。
如果您想以您描述的方式等待,我认为您可以使用NSCondition课程。