美文网首页
如何解决结果由block返回情况下的同步问题【笔记】

如何解决结果由block返回情况下的同步问题【笔记】

作者: 拥抱月亮的大星星 | 来源:发表于2019-04-17 15:14 被阅读0次

    如何解决这个问题?
    采用如下写法,用信号量解决
    dispatch_semaphore_t sema =dispatch_semaphore_create(0);
    ABAddressBookRequestAccessWithCompletion(addressBook, ^(bool granted, CFErrorRef error) {
    dispatch_semaphore_signal(sema);
    });
    dispatch_semaphore_wait(sema,DISPATCH_TIME_FOREVER);

    原理:
    先设置一个信号量,信号量为0;
    执行block
    当前线程调用完block,没有执行到block里面之前,都等待(wait在信号量为0的时候只会等待,在信号量>0的时候才会减一继续执行)
    block执行完毕,最后执行signal,将信号量+1
    wait到信号量>0,将信号量减一退出,继续执行下面的逻辑


    作者:CZ_2015
    来源:CSDN
    原文:https://blog.csdn.net/u013370834/article/details/53301604
    版权声明:本文为博主原创文章,转载请附上博文链接!

    相关文章

      网友评论

          本文标题:如何解决结果由block返回情况下的同步问题【笔记】

          本文链接:https://www.haomeiwen.com/subject/pidnwqtx.html