博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iOS开发多线程篇---线程锁(线程安全)
阅读量:5827 次
发布时间:2019-06-18

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

hot3.png

@interface BTThreadViewController (){    NSThread *OneThread;//师傅一    NSThread *TwoThread;//师傅二    NSThread *ThreeThread;//师傅三    int allCake;//蛋糕总数}@end@implementation BTThreadViewController- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil{    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];    if (self) {        // Custom initialization    }    return self;}- (void)viewDidLoad{    [super viewDidLoad];        [self myThread];}-(void)myThread{    allCake = 10;        //给每个线程起一个名字,方便下面区分    OneThread = [[NSThread alloc] initWithTarget:self selector:@selector(SendTheCake) object:nil];    OneThread.name = @"师傅一";    [OneThread start];        TwoThread = [[NSThread alloc] initWithTarget:self selector:@selector(SendTheCake) object:nil];    TwoThread.name = @"师傅二";    [TwoThread start];        ThreeThread = [[NSThread alloc] initWithTarget:self selector:@selector(SendTheCake) object:nil];    ThreeThread.name = @"师傅三";    [ThreeThread start];}-(void)SendTheCake{    while (1) {        //线程锁的优点:能有效防止因多线程抢夺资源造成的数据安全问题,缺点:需要消耗大量的CPU资源,线程锁的使用前提:多条线程抢夺同一块资源,相关专业术语:线程同步,多条线程按顺序地执行任务。线程锁,就是使用了线程同步技术        @synchronized(self){            if (allCake > 0) {                                //线程休眠时间                [NSThread sleepForTimeInterval:0.002];                                //蛋糕个数-1                allCake -= 1;                //打印当前的线程和剩余蛋糕数量                NSThread *senderThread = [NSThread currentThread];                NSLog(@"--%@发了1个蛋糕,还剩下%d个蛋糕",senderThread,allCake);            }            else            {                //退出线程                [NSThread exit];            }        }    }}

111825_3oNb_2320599.png

转载于:https://my.oschina.net/linxiaoxi1993/blog/381208

你可能感兴趣的文章
win8 关闭防火墙
查看>>
CSS——(2)与标准流盒模型
查看>>
C#中的Marshal
查看>>
linux命令:ls
查看>>
Using RequireJS in AngularJS Applications
查看>>
hdu 2444(二分图最大匹配)
查看>>
【SAP HANA】关于SAP HANA中带层次结构的计算视图Cacultation View创建、激活状况下在系统中生成对象的研究...
查看>>
DevOps 前世今生 | mPaaS 线上直播 CodeHub #1 回顾
查看>>
iOS 解决UITabelView刷新闪动
查看>>
CentOS 7 装vim遇到的问题和解决方法
查看>>
JavaScript基础教程1-20160612
查看>>
ios xmpp demo
查看>>
python matplotlib 中文显示参数设置
查看>>
【ros】Create a ROS package:package dependencies报错
查看>>
通过容器编排和服务网格来改进Java微服务的可测性
查看>>
re:Invent解读:没想到你是这样的AWS
查看>>
PyTips 0x02 - Python 中的函数式编程
查看>>
使用《Deep Image Prior》来做图像复原
查看>>
Linux基础命令---rmdir
查看>>
Android图片添加水印图片并把图片保存到文件存储
查看>>