练习
- (void)semaphore
{
dispatch_semaphore_t semap1 = dispatch_semaphore_create(1);
dispatch_semaphore_t semap2 = dispatch_semaphore_create(1);
__block int i = 0;
dispatch_queue_t queue1 = dispatch_queue_create("111", DISPATCH_QUEUE_CONCURRENT);
dispatch_queue_t queue2 = dispatch_queue_create("222", DISPATCH_QUEUE_CONCURRENT);
// 消耗掉偶数队列的信号量
dispatch_semaphore_wait(semap1, DISPATCH_TIME_FOREVER);
dispatch_async(queue1, ^{
while (i < 100) {
dispatch_semaphore_wait(semap1, DISPATCH_TIME_FOREVER);
NSLog(@"偶数线程:%d",i);
i ++;
dispatch_semaphore_signal(semap2);
}
});
dispatch_async(queue2, ^{
while (i < 100) {
dispatch_semaphore_wait(semap2, DISPATCH_TIME_FOREVER);
NSLog(@"奇数线程:%d",i);
i ++;
dispatch_semaphore_signal(semap1);
}
});
}
- (void)lockTest
{
__block int i = 0;
NSLock *lock1 = [[NSLock alloc] init];
NSLock *lock2 = [[NSLock alloc] init];
dispatch_queue_t queue1 = dispatch_queue_create("111", DISPATCH_QUEUE_CONCURRENT);
[lock2 lock];
dispatch_async(queue1, ^{
while (i < 100) {
[lock1 lock];
NSLog(@"偶数线程:%d",i);
i ++;
[lock2 unlock];
}
});
dispatch_async(queue1, ^{
while (i < 100) {
[lock2 lock];
NSLog(@"奇数线程:%d",i);
i ++;
[lock1 unlock];
}
});
}
网友评论