【问题标题】:ios semaphore wait doesn't waitios信号量等待不等待
【发布时间】:2013-06-12 09:12:12
【问题描述】:

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

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

【问题讨论】:

    标签: ios grand-central-dispatch semaphore


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 2014-10-21
        • 2011-12-08
        • 1970-01-01
        • 1970-01-01
        • 2015-06-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多