Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ios信号量等待不';等不及了_Ios_Grand Central Dispatch_Semaphore - Fatal编程技术网

ios信号量等待不';等不及了

ios信号量等待不';等不及了,ios,grand-central-dispatch,semaphore,Ios,Grand Central Dispatch,Semaphore,当使用大于0的值创建信号量时,我在使用dispatch_信号量_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

当使用大于0的值创建信号量时,我在使用dispatch_信号量_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);
等待不应该等待两个信号吗?
在上面的代码中,它根本不等待,因此调用了发布,结果是崩溃

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


如果您想按照您描述的方式等待,我认为您可以使用类。

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

在开始任务之前,通过两次调用
dispatch\u group\u enter()
将组初始化为大小2,并且
dispatch\u group\u wait()
将在返回前等待两次调用
dispatch\u group\u leave()