GCD 实现生产-消费 模式

时间:2025-04-17 21:06:49
#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();
dispatch_group_t group = dispatch_group_create();
dispatch_queue_t queue = dispatch_queue_create("custom_dis", ); dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, ), ^{ if (![[NSThread currentThread] isMainThread]) {
NSLog(@"===异步线程===============");
} for (int i = ; i<; 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(); dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, ), ^{
if (![[NSThread currentThread] isMainThread]) {
NSLog(@"===异步线程===============");
}
sleep(); 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