ios信号量等待不等

时间:2013-06-12 09:12:13

标签: ios grand-central-dispatch semaphore

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

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

2 个答案:

答案 0 :(得分:6)

使用调度组而不是信号量来获取此行为。

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

答案 1 :(得分:4)

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

如果您想以您描述的方式等待,我认为您可以使用NSCondition课程。