ios信号量等待不等

Mon*_*nes 3 semaphore grand-central-dispatch ios

当使用大于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);
Run Code Online (Sandbox Code Playgroud)

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

das*_*das 6

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

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