博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
解决资源抢夺问题(买车票)
阅读量:6437 次
发布时间:2019-06-23

本文共 1365 字,大约阅读时间需要 4 分钟。

hot3.png

//

//  ViewController.m

//  解决资源抢夺问题(买车票)

//

//  Created by dc008 on 15/12/25.

//  Copyright © 2015 崔晓宇. All rights reserved.

//

#import "ViewController.h"

ViewController ()

// nonatomic属性读取的是内存数据(寄存器计算好的结果)

// atomic属性读取直接读取寄存器的数据,***[这样就不会出现一个线程正在修改数据,而另一个线程读取了修改之前的数据]*** 永远保证同时只有一个线程在访问一个属性;

{

    NSLock *_lock;

}

@property (atomic,strong)NSMutableArray *tickets;//

@implementation ViewController

- (void)viewDidLoad {

    [super viewDidLoad];

    _tickets = [NSMutableArray array];

    [_tickets addObjectsFromArray:@[@"1.上铺",@"2.中铺",@"3.下铺"]];

    [self beginSell];

    _lock = [[NSLock alloc]init];

}

- (void)buyTicket : (int)buyer{

    NSLog(@"%d",buyer);//10位顾客准备购买

    //使用时,把需要加锁的代码放在lockunlock之间

    //当一个线程A进入加锁代码后,另一个线程B它就无法访问,只有当线程A执行完加锁的任务以后,B线程才能访问加锁代码

//    [_lock lock];//上锁

    @synchronized(self) {

        if (_tickets.count > 0) {

            NSLog(@"%d号顾客买到:%@",buyer,[_tickets lastObject]);

            [_tickets removeLastObject];

        }

        else{

            NSLog(@"%d号顾客晚了一步!票已经卖完了!!!!",buyer);

        }

    }

    

//    [_lock unlock];//解锁

}

- (void)beginSell{

    dispatch_queue_t globalQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);

    //创建10个线程用于抢票(10个人来买票)

    for (int i = 0; i < 10; i++) {

        //异步执行

        dispatch_async(globalQueue, ^{

            [self buyTicket : i];

        });

    }

    

    

}

- (void)didReceiveMemoryWarning {

    [super didReceiveMemoryWarning];

    // Dispose of any resources that can be recreated.

}

@end

转载于:https://my.oschina.net/u/2499773/blog/552474

你可能感兴趣的文章
DELL服务器iDRAC相关设置
查看>>
JVM学习笔记(一)------基本结构
查看>>
$@等特定shell变量的含义
查看>>
我的友情链接
查看>>
(超详细版)Linux下Hadoop2.7.1集群环境的搭建(3台为例)
查看>>
策略模式、上下文与内部类的思考
查看>>
关于getCurrentUrl的获取问题
查看>>
Confluence 6 归档一个空间
查看>>
数据循环缓冲区算法
查看>>
2014年工作中遇到的20个问题:120-140
查看>>
[原创]windows server 2012 AD架构 试验 系列 – 11AD域和站点部署(2)
查看>>
自动关闭esxi主机及所有虚拟机
查看>>
从网站上下载视频
查看>>
Oracle12cR2的CDB与PDB简单管理操作
查看>>
Java中的CopyOnWrite
查看>>
第一个shell脚本
查看>>
每日一shell(八)nginx日志切割
查看>>
[Hadoop in China 2011] Facebook Message在HBase基础上的应用
查看>>
支付系统信息流和资金流
查看>>
css框架
查看>>