我在使用dispatch_semaphore_wait(..)时遇到问题。使用大于0的值创建信号量时
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);等待不应该等待两个信号吗?在上面的代码中,它根本不等待,所以调用了释放,结果是崩溃!
发布于 2013-06-12 17:44:03
不,这不是它的工作方式。线程将在第三次等待时阻塞,直到前两个中的一个被通知为止。它是一种指定一次可以访问资源的线程数量的系统。更多信息here。
如果你想以你所描述的方式等待,我想你可以使用NSCondition类。
发布于 2013-06-13 03:50:35
使用分派组而不是信号量来获得此行为。
在开始任务之前,通过调用dispatch_group_enter()两次将组初始化为大小2,dispatch_group_wait()将等待对dispatch_group_leave()的两次调用才会返回。
https://stackoverflow.com/questions/17061748
复制相似问题