线程锁 ---- NSLock , @synchronized 和 dispatch_semaphore_t

来源:互联网 发布:网络做兼职是真的吗 编辑:程序博客网 时间:2024/05/22 17:09
<pre name="code" class="objc">-(void)methodA{    NSLog(@"%@",NSStringFromSelector(_cmd));}-(void)methodB{    NSLog(@"%@",NSStringFromSelector(_cmd));}- (void)viewDidLoad {    [super viewDidLoad];        dispatch_semaphore_t semaphore = dispatch_semaphore_create(2);        //线程1    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{        //等待信号        dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);                //操作处理        [self methodA];        sleep(2);                //发送信号        dispatch_semaphore_signal(semaphore);    });            //线程2    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{        sleep(1);        //等待信号        dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);                //操作处理        [self methodB];               //发送信号        dispatch_semaphore_signal(semaphore);    });    }

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ @synchronized(self){ [self methodA]; sleep(3); } }); dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ sleep(1); @synchronized(self){ [self methodB]; } });
-(void)methodA{    NSLog(@"%@",NSStringFromSelector(_cmd));}-(void)methodB{    NSLog(@"%@",NSStringFromSelector(_cmd));}- (void)viewDidLoad {    [super viewDidLoad];        dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{        @synchronized(self){            [self methodA];             sleep(3);        }    });        dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{         sleep(1);        @synchronized(self){            [self methodB];        }    });    }


0 0
原创粉丝点击