iOS疯狂详解之GCD卖火车票

本文通过一个并发卖火车票的例子,深入讲解了iOS中GCD的使用,涉及到并发队列、互斥锁的概念,以及如何在多线程环境下保证数据同步。示例中创建了两个并发队列模拟火车站和代售点售票,并利用NSLock确保售票过程的线程安全。
摘要由CSDN通过智能技术生成
@interface ViewController ()
{
    int _totalCount; // 火车票总票数
    int _surplusCoynt; // 剩余票数
    NSLock *_lock; // 互斥锁
}

@end

// 设置剩余票数
    _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];
    });

#pragma mark - 售票方法
- (void)saleTickets:(dispatch_queue_t)queue
{
    while (_surplusCoynt > 0) {
        [_lock lock]; // 获取互斥锁并且添加
        const char *queueLabel = dispatch_queue_get_label(queue);
        NSString *label = [NSString stringWithUTF8String:queueLabel];
        NSLog(@"当前火车票由%@售出,余票:%d张", label, _surplusCoynt);
        _surplusCoynt--;
        [_lock unlock];
    }
}


评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值