3

当使用大于 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);

等待不应该等待两个信号吗?在上面的代码中,它根本不等待,因此调用了释放,结果是崩溃!

4

2 回答 2

6

使用调度组而不是信号量来获得这种行为。

dispatch_group_enter()在开始任务之前调用两次将组初始化为大小 2 ,并在返回之前dispatch_group_wait()等待两次调用。dispatch_group_leave()

于 2013-06-12T19:50:34.860 回答
4

不,这不是它的工作原理。线程将在第三次等待时阻塞,直到前两个等待之一发出信号。它是一个指定有多少线程可以一次访问资源的系统。更多信息在这里

如果你想以你描述的方式等待,你可以使用NSCondition类,我想。

于 2013-06-12T09:44:03.147 回答