dispatch_semaphore_t与dispatch_group_t

- (void)viewDidLoad {

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0), ^{

[selftestLock];

});

}

#define semaphore_signal 0

- (void)testLock {

#if semaphore_signal

dispatch_semaphore_t sem = dispatch_semaphore_create(0);

#else

dispatch_group_t group =dispatch_group_create();

#endif

NSLog(@"begin");

#if semaphore_signal

#else

dispatch_group_enter(group);

#endif

dispatch_sync(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0), ^{

NSLog(@"loading....");

[imageView setImageWithURL:[NSURL URLWithString:@"http://www.pptbz.com/pptpic/UploadFiles_6909/201110/20111014111307895.jpg"] placeholder:nil options:0 completion:^(UIImage*image,NSURL*url,YYWebImageFromType from,YYWebImageStage stage,NSError*error) {

NSLog(@"loading finish ... ");

#if semaphore_signal

dispatch_semaphore_signal(sem);

#else

dispatch_group_leave(group);

#endif

}];

});

#if semaphore_signal

dispatch_semaphore_wait(sem, DISPATCH_TIME_FOREVER);

#else

dispatch_group_wait(group,DISPATCH_TIME_FOREVER);

#endif

NSLog(@"end");

}

2016-08-05 16:38:51.616 TableViewControllerDemo[16337:2393186] begin

2016-08-05 16:38:51.617 TableViewControllerDemo[16337:2393186] loading....

2016-08-05 16:38:51.703 TableViewControllerDemo[16337:2392956] loading finish ...

2016-08-05 16:38:51.704 TableViewControllerDemo[16337:2393186] end

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Managing Units of Work(管理工作单位) 调度块允许您直接配置队列中各个工作单元的属性。它们还...
    edison0428阅读 8,092评论 0 1
  • 一. 重点: 1.dispatch_queue_create(生成Dispatch Queue) 2.Main D...
    BestJoker阅读 1,606评论 2 2
  • 【Xcode-Men】Hi,我们团队的井小二童鞋给我们取了个队名:Xcode-Men,简称X-Men,是不是屌屌的...
    知识小集阅读 5,966评论 20 41
  • 一、前言 上一篇文章iOS多线程浅汇-原理篇中整理了一些有关多线程的基本概念。本篇博文介绍的是iOS中常用的几个多...
    nuclear阅读 2,083评论 6 18
  • 服务器端给了一个delete请求的API 在调试的过程中,发送请求时服务始终器接收不到我请求的参数,接口一直不能调...
    纯情扫地僧阅读 3,205评论 0 0