您的位置:首页 > 其它

GCD 实现生产-消费 模式

2014-10-16 18:01 393 查看
#import "ViewController.h"

@interface ViewController (){

}
@property (nonatomic,strong)    dispatch_semaphore_t sema;

@end

@implementation ViewController

- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.

_sema = dispatch_semaphore_create(1);
dispatch_group_t group = dispatch_group_create();
dispatch_queue_t queue = dispatch_queue_create("custom_dis", 0);

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{

if (![[NSThread currentThread]  isMainThread]) {
NSLog(@"===异步线程===============");
}

for (int i = 0; i<10; i++) {

dispatch_semaphore_wait(_sema, DISPATCH_TIME_FOREVER);

dispatch_group_async(group, queue, ^{
if (![[NSThread currentThread]  isMainThread]) {
NSLog(@"===异步线程===============");
}

[self doCustomSomting];

});

}

});

dispatch_group_wait(group, DISPATCH_TIME_FOREVER);

}

-(void)doCustomSomting{

sleep(2);

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
if (![[NSThread currentThread]  isMainThread]) {
NSLog(@"===异步线程===============");
}
sleep(1);

dispatch_async(dispatch_get_main_queue(), ^{

if ([[NSThread currentThread]  isMainThread]) {
NSLog(@"===主线程===============");
}
NSLog(@"=====compeletSomting=========");

dispatch_semaphore_signal(_sema);

});

});

}

- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}

@end
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: