@interface ViewController ()
{
int _totalCount; // 火车票总票数
int _surplusCount; // 剩余票数
NSLock *_lock; // 互斥锁
}
@end
[objc] view plaincopy
// 设置剩余票数
_surplusCoynt = 100;
_lock = [[NSLock alloc] init]; // 创建互斥锁,多个线程共享使用
// 自己创建并行队列
dispatch_queue_t queue1 = dispatch_queue_create("火车站", DISPATCH_QUEUE_CONCURRENT);
dispatch_async(queue1, ^{
[self saleTickets:queue1];
});
dispatch_queue_t queue2 = dispatch_queue_create("代售点", DISPATCH_QUEUE_CONCURRENT);
dispatch_async(queue2, ^{
[self saleTickets:queue2];
});
[objc] view plaincopy
#pragma mark - 售票方法
- (void)saleTickets:(dispatch_queue_t)queue
{
while (_surplusCount > 0) {
[_lock lock]; // 获取互斥锁并且添加
const charchar *queueLabel = dispatch_queue_get_label(queue);
NSString *label = [NSString stringWithUTF8String:queueLabel];
NSLog(@"当前火车票由%@售出,余票:%d张", label, _surplusCount);
_surplusCount--;
[_lock unlock];
}
}
ios激情详解之GCD
最新推荐文章于 2021-02-26 18:20:06 发布