文档章节

iOS开发多线程篇---线程锁(线程安全)

琳小兮
 琳小兮
发布于 2015/03/02 11:21
字数 394
阅读 3208
收藏 2
点赞 1
评论 1
@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];
            }
        }
    }
}

© 著作权归作者所有

共有 人打赏支持
琳小兮
粉丝 30
博文 28
码字总数 17762
作品 0
襄阳
程序员
加载中

评论(1)

天师上人
额,是不是南京交流群里的?
2018 一份"有点难"的iOS面试题(5年iOS开发)

序言: 之前一时兴致在本站上出过一份iOS的中级面试题,引起一些关注,不少同学表示对”隐藏关卡“感兴趣。升级版iOS面试题来了,目测难倒90%iOS程序员,目测一大波程序员撸着袖子在靠近。 ...

原来是泽镜啊 ⋅ 05/26 ⋅ 0

经过阿里,百度一面,二面后,我总结了50道iOS面试题

前言: 金三银四已经过去,根据统计,很多人都会选择在三月四月跳槽,原因有很多,企业年后会有大量员工离职,员工觉得老公司待遇不怎么样?薪资不够高,想换个新环境等等原因,所以,三月四...

原来是泽镜啊 ⋅ 05/04 ⋅ 0

如何判断你是合格的高级iOS开发工程师?

前言 随着移动互联网的高速发展泄洪而来,有意学习移动开发的人越来越多了,竞争也是越来越大,需要学习的东西很多。如何才能在激烈的移动开发者竞争中一枝独秀,成为一名真正合格的高级iOS...

_小迷糊 ⋅ 05/26 ⋅ 0

Swift多线程之Operation:按优先级加载图片

乖乖的,俺又来了。上一个系列写传感器,特别庆幸自己在开篇的时候就立下了一个Flag,不然那个系列估计到现在就不知道被自己偏到什么地方去了。众所周知的iOS有好多传感器,配合各种传感器可...

非典型技术宅 ⋅ 01/23 ⋅ 0

iOS多线程:『NSOperation、NSOperationQueue』详尽总结

iOS多线程:『NSOperation、NSOperationQueue』详尽总结 转载: 原地址https://www.jianshu.com/p/4b1d77054b35 本文首发于我的个人博客:『不羁阁』 文章链接:传送门 本文更新时间:2018年0...

法斗斗 ⋅ 04/20 ⋅ 0

面试攻略:何为技术和年龄不匹配

最近帮人组建研发中心,面试了很多开发工程师,对“技术能力与工作年限是否匹配”的理解更深了,记录下来分享给大家。 为便于讨论,简单的依据工作年限,划分出 3 个阶段: 1 ~ 3 年 4 ~ 5 ...

imbrl71u7pt5x29rleu7 ⋅ 04/18 ⋅ 0

一年iOS工作经验,如何一举拿下百度、美团、快手等Offer面经(附面试题)

前言: 先简单说说我最近的面试经历吧。面试的公司很多,大部分最后都能得到令人满意的结果,我将这些体会记录下来,面了这么多公司,如果不留下什么,那岂不是太浪费了。对于我来说,这也是...

原来是泽镜啊 ⋅ 04/24 ⋅ 0

《App架构师实践指南》:移动开发的进阶指南

文章主要内容: 什么是 app 架构师 这本书主要内容 读完感受 什么是 App 架构师 成为“架构师”是许多程序员的梦想,当然也包括我,在工作的几年里,我见过很多架构师,他们在设计某个大型系...

异步社区 ⋅ 05/29 ⋅ 0

iOS自定义弹出视图、收音机APP、图片涂鸦、加载刷新、文件缓存等源码

iOS精选源码 一款优秀的 聆听夜空FM 源码(http://www.code4app.com/thread-14546-1-1.html) zhPopupController 简单快捷弹出自定义视图(http://www.code4app.com/thread-14861-1-1.html) WHS......

sunnyaigd ⋅ 06/04 ⋅ 0

iOS查看屏幕帧数工具--YYFPSLabel

学习 YYKit 代码时,发现 ibireme 在项目里加入的一个查看当前屏幕帧数的小工具,效果如下: 挺实用,实现方法也很简单,但是思路特别棒。 这里是Demo: YYFPSLabel 这里我把这个小工具从 中...

yehot ⋅ 2016/04/05 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Gitee 生成并部署SSH key

1.如何生成ssh公钥 你可以按如下命令来生成 sshkey: ssh-keygen -t rsa -C "xxxxx@xxxxx.com" # Generating public/private rsa key pair...# 三次回车即可生成 ssh key 查看你的 ...

晨猫 ⋅ 50分钟前 ⋅ 0

zblog2.3版本的asp系统是否可以超越卢松松博客的流量[图]

最近访问zblog官网,发现zlbog-asp2.3版本已经进入测试阶段了,虽然正式版还没有发布,想必也不久了。那么作为aps纵横江湖十多年的今天,blog2.2版本应该已经成熟了,为什么还要发布这个2.3...

原创小博客 ⋅ 今天 ⋅ 0

聊聊spring cloud的HystrixCircuitBreakerConfiguration

序 本文主要研究一下spring cloud的HystrixCircuitBreakerConfiguration HystrixCircuitBreakerConfiguration spring-cloud-netflix-core-2.0.0.RELEASE-sources.jar!/org/springframework/......

go4it ⋅ 今天 ⋅ 0

二分查找

二分查找,也称折半查找、二分搜索,是一种在有序数组中查找某一特定元素的搜索算法。搜素过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜素过程结束;如果某一特定元素大于...

人觉非常君 ⋅ 今天 ⋅ 0

VS中使用X64汇编

需要注意的是,在X86项目中,可以使用__asm{}来嵌入汇编代码,但是在X64项目中,再也不能使用__asm{}来编写嵌入式汇编程序了,必须使用专门的.asm汇编文件来编写相应的汇编代码,然后在其它地...

simpower ⋅ 今天 ⋅ 0

ThreadPoolExecutor

ThreadPoolExecutor public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, ......

4rnold ⋅ 昨天 ⋅ 0

Java正无穷大、负无穷大以及NaN

问题来源:用Java代码写了一个计算公式,包含除法和对数和取反,在页面上出现了-infinity,不知道这是什么问题,网上找答案才明白意思是负的无穷大。 思考:为什么会出现这种情况呢?这是哪里...

young_chen ⋅ 昨天 ⋅ 0

前台对中文编码,后台解码

前台:encodeURI(sbzt) 后台:String param = URLDecoder.decode(sbzt,"UTF-8");

west_coast ⋅ 昨天 ⋅ 0

实验楼—MySQL基础课程-挑战3实验报告

按照文档要求创建数据库 sudo sercice mysql startwget http://labfile.oss.aliyuncs.com/courses/9/createdb2.sqlvim /home/shiyanlou/createdb2.sql#查看下数据库代码 代码创建了grade......

zhangjin7 ⋅ 昨天 ⋅ 0

一起读书《深入浅出nodejs》-node模块机制

node 模块机制 前言 说到node,就不免得提到JavaScript。JavaScript自诞生以来,经历了工具类库、组件库、前端框架、前端应用的变迁。通过无数开发人员的努力,JavaScript不断被类聚和抽象,...

小草先森 ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部