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

如何解决这个问题?
采用如下写法,用信号量解决
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
版权声明:本文为博主原创文章,转载请附上博文链接!

推荐阅读更多精彩内容

  • Managing Units of Work(管理工作单位) 调度块允许您直接配置队列中各个工作单元的属性。它们还...
    edison0428阅读 744评论 1 0
  • 锁是一种同步机制,用于多线程环境中对资源访问的限制iOS中常见锁的性能对比图(摘自:ibireme): iOS锁的...
    LiLS阅读 501评论 0 3
  • 一:base.h 二:block.h 1. dispatch_block_flags:DISPATCH_BLOCK...
    小暖风阅读 237评论 0 0
  • Dispatch Queues dispatch queues是执行任务的强大工具,允许你同步或异步地执行任意代码...
    YangPu阅读 132评论 0 4
  • 一直不满意,一直在寻找现在的这颗种子一直不发芽想要重新找一颗能长成参天大树的种子 我去平原寻找平原的人们说这里的种...
    瑜伽散人阅读 37评论 0 5