首页 > 代码库 > GCD 实现生产-消费 模式

GCD 实现生产-消费 模式

#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

 

GCD 实现生产-消费 模式