博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
线程 例子
阅读量:7114 次
发布时间:2019-06-28

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

hot3.png

#import "ViewController.h"@interface ViewController (){    NSLock *_lock;    //nonatomic属性读取的是内容数据(寄存器计算好的结果)    //atomic属性保证直接读取寄存器的数据,****[这样就不会出现一个线程正在修改数据,而另一个线程读取了修改之前的数据]***永远保证同时只有一个线程在访问一个属性//    NSMutableArray *_tickets;}@property(atomic,strong)NSMutableArray *tickets;@end@implementation ViewController- (void)viewDidLoad {    [super viewDidLoad];    _lock = [[NSLock alloc]init];    _tickets = [NSMutableArray array];    [_tickets addObjectsFromArray:@[@"1.上铺",@"1.中铺",@"1.下铺"]];    [self beginSell];}-(void)buyTicket:(int)buyer{    NSLog(@"%i",buyer);//10位顾客准备购买    //使用时,把需要加锁的代码放在lock和unlock之间    //当一个线程A进入加锁代码后,另一个线程B他就无法访问,只有当线程A执行完加锁的任务以后,B线程才能访问加锁代码    //方法1//    [_lock lock];//上锁    //方法2    @synchronized(self) {        if(_tickets.count > 0){        NSLog(@"%i号顾客买到:%@",buyer,[_tickets lastObject]);        [_tickets removeLastObject];    }else{        NSLog(@"%i号顾客晚到了,没有买到",buyer);    }    }//    [_lock unlock];//解锁}#pragma mark 开始贩卖-(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/2499339/blog/608796

你可能感兴趣的文章
Android 获取屏幕宽高
查看>>
Android系统启动过程详解【转】
查看>>
常看本地是否安装Git和maven工具
查看>>
JavaScript 将两个数组合并,且删除重复的值
查看>>
sql server统计字段的值在某些范围内中的个数
查看>>
UEFI EVENT 全解
查看>>
python时间模块小结
查看>>
BZOJ3997:[TJOI2015]组合数学(DP,Dilworth定理)
查看>>
C# Application.DoEvents() 处理队列消息,防界面假死。
查看>>
python基础===python实现截图
查看>>
Django模型
查看>>
Quartus中代码字体大小的调整方法
查看>>
配置url防盗链、目录权限访问控制Directory、文件访问权限控制FilesMatch
查看>>
【spring boot】4.spring boot配置多环境资源文件
查看>>
关于datepicker如何获取月中日长
查看>>
神经网络练习四-ex4
查看>>
通用for_each清理容器模板函数
查看>>
MVC5发布到IIS,出现HTTP 错误 404.0 - Not Found的完美解决方法
查看>>
c# 与 java 语法异同
查看>>
cleanup failed because the file not under version control问题的解决
查看>>