文档章节

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

琳小兮
 琳小兮
发布于 2015/03/02 11:21
字数 394
阅读 3210
收藏 2
@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
博文 37
码字总数 20045
作品 0
襄阳
程序员
加载中

评论(1)

天师上人
额,是不是南京交流群里的?
iOS多线程编程之NSThread的使用

iOS多线程编程之NSThread的使用 1、简介: 1.1 iOS有三种多线程编程的技术,分别是: 1.、NSThread 2、Cocoa NSOperation (iOS多线程编程之NSOperation和NSOperationQueue的使用) 3、GCD 全...

malawo
2013/09/05
0
0
iOS多线程编程:线程同步总结 NSCondtion

1:原子操作 - OSAtomic系列函数 iOS平台下的原子操作函数都以OSAtomic开头,使用时需要包含头文件<libkern/OSBase.h>。不同线程如果通过原子操作函数对同一变量进行操作,可以保证一个线程的...

abcMx
2014/03/25
0
0
iOS多线程编程:线程同步总结 NSCondtion

1:原子操作 - OSAtomic系列函数 iOS平台下的原子操作函数都以OSAtomic开头,使用时需要包含头文件<libkern/OSBase.h>。不同线程如果通过原子操作函数对同一变量进行操作,可以保证一个线程的...

zhipengbird
2014/10/21
0
0
Knowledge-Reserve

Knowledge-Reserve ComputerOperatingSystem 编译 静态库&动态库(Linux) 静态链接&动态链接 内存 内联函数&宏 Static&Const 死锁 线程安全 线程同步 锁 DataStructure Programme 集约型&离散...

旭宝爱吃鱼
08/16
0
0
iOS开发 多线程(二) NSThread的使用(转)

每个iOS应用程序都有个专门用来更新显示UI界面、处理用户的触摸事件的主线程,因此不能将其他太耗时的操作放在主线程中执行,不然会造成主线程堵塞(出现卡机现象),带来极坏的用户体验。一般...

神补刀
2015/08/18
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

spring 容器实现对bean的管理(注解方式解析,源码阅读)

因为最近在研究学习spring boot,所以这里想详细学习回顾了一下spring 容器对bean的一些管理方式和部分源码学习。 首先初始类AnnotationConfigApplicationContext,简单源码查看,支持两个参...

小海bug
14分钟前
0
0
数据结构:二分查找 java

二分查找的前提是有序存储,利用顺序存储和元素排序 /** * 二分查找,查找成功,返回下标记 * @param values * @param begin * @param end * @param key * @param <T> * @ret...

京一
32分钟前
0
0
@SpringBootApplication 注解

@SpringBootApplication注解是一个组合注解,包含以下注解 @Target(ElementType.TYPE) 注解的作用目标 @Retention(RetentionPolicy.RUNTIME) Reteniton的作用是定义被它所注解的注解保留多久,...

java.刘
45分钟前
0
0
sentinel自定义DataSource实战

序 本文主要研究一下如何自定义sentinel的DataSource,这里以jdbc为例。 maven <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-sen......

go4it
今天
1
0
xgboost/gbdt在调参时为什么树的深度很少就能达到很高的精度?

问题: 用xgboost/gbdt在在调参的时候把树的最大深度调成6就有很高的精度了。但是用DecisionTree/RandomForest的时候需要把树的深度调到15或更高。用RandomForest所需要的树的深度和Decisio...

tantexian
今天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部