文档章节

OBObjective-c 多线程(锁机制) 解决资源抢夺问题

xtzPioneer
 xtzPioneer
发布于 2015/12/25 16:14
字数 333
阅读 103
收藏 1

钉钉、微博极速扩容黑科技,点击观看阿里云弹性计算年度发布会!>>>

//

//  ViewController.m

//  解决资源抢夺问题

//

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

//  Copyright © 2015 DC017. All rights reserved.

//


#import "ViewController.h"


@interface ViewController ()

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

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


{

    NSLock * lock;

}

@property(atomic,strong)NSMutableArray * muarray;


@end


@implementation ViewController


- (void)viewDidLoad {

    [super viewDidLoad];

    _muarray=[[NSMutableArray alloc]init];

    [_muarray addObjectsFromArray:@[@"1.",@"2.",@"3."]];

    [self beginSell];

    

    lock=[[NSLock alloc]init];

    

   

    

    

}

#pragma mark 锁机制

//IOS 中常用两种方法

//1.NSLock

//2.@synchronized

-(void)buyTicket:(int)buyer{

    //1.NSLock

//    [lock lock];

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

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

    

    //2.@synchronized

    @synchronized(self) {

        if (_muarray.count>0) {

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

            [_muarray 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


xtzPioneer
粉丝 2
博文 92
码字总数 48420
作品 0
杭州
程序员
私信 提问
加载中
请先登录后再评论。
iOS开发多线程-线程安全

一、多线程的安全隐患 资源共享 1块资源可能会被多个线程共享,也就是多个线程可能会访问同一块资源 比如多个线程访问同一个对象、同一个变量、同一个文件 当多个线程访问同一块资源时,很容...

冰晨
2015/11/26
9
0
iOS开发多线程篇—线程安全

一、多线程的安全隐患 资源共享 1块资源可能会被多个线程共享,也就是多个线程可能会访问同一块资源 比如多个线程访问同一个对象、同一个变量、同一个文件 当多个线程访问同一块资源时,很容...

osc_f2mu78to
2019/02/05
3
0
iOS 多线程之 NSThread的基本使用

一个NSThread对象就代表一条线程 下面是NSThread开启线程的方法 - (void)touchesBegan:(NSSet<UITouch > )touches withEvent:(UIEvent *)event { } (void) openThreadWithNSThread { } (voi......

osc_8xavvdt3
2018/03/05
4
0
iOS多线程之互斥锁

1.安全隐患解决-互斥锁 互斥锁使用格式 @synchronized(锁对象) { // 需要锁定的代码 }注意:锁定1份代码只用1把锁,用多把锁是无效的 互斥锁的优缺点 优点: 能有效防止因多线程抢夺资源造成...

JlongTian
2016/01/07
106
0
iOS开发之Run Loop

1、概述 (1) Run Loop提供了一种异步执行代码的机制,不能并行执行任务。 (2) 在主队列中,Main Run Loop直接配合任务的执行,负责处理UI事件、计时器,以及其它内核相关事件。 (3) Run Loop...

feng_blog
2015/08/31
20
0

没有更多内容

加载失败,请刷新页面

加载更多

还在用Swagger(丝袜哥)生成接口文档?我推荐你试试它.....

JApiDocs是一个无需额外注解、开箱即用的SpringBoot接口文档生成工具。 编写和维护API文档这个事情,对于后端程序员来说,是一件恼人但又不得不做的事情,我们都不喜欢写文档,但除非项目前后...

路人甲Java
07/09
0
0
智能仓储的独角兽逻辑

智能仓储的主要应用市场在哪里?客户的付费意愿和付费能力如何? 1、仓储设备具备标准化和通用化特点 由于电商和新零售的快速发展,轻工业品零售仓库的需求量大幅增加。而中国又是全球轻工业...

logiter
2019/08/23
14
0
可是小腿哪能扭过大腿

父亲是一个特别勤苦的人,他从不睡懒觉,每天天麻麻亮,或是下地干活,或是在家搞副业,或是拿着铁锨、粪筐,到路边,到村子周围,到牲畜常出入的地方,去拾粪蛋子,为庄稼积攒肥料,父亲不仅...

瑾123
9分钟前
6
0
一个volatile跟面试官扯了半个小时

《安琪拉与面试官二三事》系列文章,本文是此系列第三篇 一个HashMap能跟面试官扯上半个小时 一个synchronized跟面试官扯了半个小时 欢迎关注Wx公众号:【安琪拉的博客】—揭秘Java后端技术,...

osc_6ls9vwji
10分钟前
0
0
内网渗透靶机-VulnStack 2

WEB服务器:windows2008系统 外网网卡IP:192.168.1.152 内网网卡IP:10.10.10.80 域成员:windows server 2003系统 网卡IP:10.10.10.200 域控服务器:windows server 2008系统 网卡IP:192...

dnsil
07/10
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部