#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