文档章节

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

xtzPioneer
 xtzPioneer
发布于 2015/12/25 16:14
字数 333
阅读 29
收藏 0
点赞 0
评论 0

//

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

JlongTian
2016/01/07
61
0
iOS开发系列--并行开发其实很容易

--多线程开发 概览 大家都知道,在开发过程中应该尽可能减少用户等待时间,让程序尽可能快的完成运算。可是无论是哪种语言开发的程序最终往往转换成汇编语言进而解释成机器码来执行。但是机器...

jianxin160
2015/08/18
0
0
iOS开发--多线程 并行开发

概览 大家都知道,在开发过程中应该尽可能减少用户等待时间,让程序尽可能快的完成运算。可是无论是哪种语言开发的程序最终往往转换成汇编语言进而解释成机器码来执行。但是机器码是按顺序执...

黑伞将军
2015/09/15
58
0
iOS下的并行开发

在开发过程中应该尽可能减少用户等待时间,让程序尽可能快的完成运算。可是无论是哪种语言开发的程序最终往往转换成汇编语言进而解释成机器码来执行。但是机器码是按顺序执行的,一个复杂的多...

iShown
2016/07/01
0
0
OBObjective-c 多线程

// ViewController.m文件 // GCD 多线程 // // Created by DC017 on 15/12/25. // Copyright © 2015年 DC017. All rights reserved. // #import "ViewController.h" @interface ViewControl......

_pioneer_
2015/12/25
24
0
传智播客学习笔记 网络多线程

主线程处理UI,避免耗时操作 iOS多线程技术有4种 pthread,通用技术,跨平台 c语言,程序员管理生命周期,几乎不用 NSThread 面向对象,可以直接操作线程 OC语言 程序员 管理生命周期,偶尔使...

云飞扬v5
2015/08/11
0
0
iOS中的“锁事”

抛砖引玉 说到锁不得不提线程安全,说到线程安全,作为iOS程序员又不得不提 与 不会对生成的 、 方法加同步锁(非原子性) 会对生成的 、 加同步锁(原子性) / 被 修饰的属性时,该属性是读...

Dalla尹
2017/12/01
0
0
【Practical API Design学习笔记】同步与死锁

像Java这类语言,写多线程是很经常的事情,但是在多线程中,能够保证在不同环境中都不死锁是非常不容易的。没有一种方法能够保证不死锁,但是一些设计模式和建议对此可能是有用的。 1、文档线...

亭子happy
2013/05/28
0
0
Java多线程学习(四)等待/通知(wait/notify)机制

系列文章传送门: Java多线程学习(一)Java多线程入门 Java多线程学习(二)synchronized关键字(1) java多线程学习(二)synchronized关键字(2) Java多线程学习(三)volatile关键字 Ja...

一只蜗牛呀
04/16
0
0
《Java多线程编程核心技术》读书笔记

《Java多线程编程核心技术》读书笔记。 第一章 Java多线程技能 使用Java多线程两种方式。 继承Thread类与实现Runnable接口。 线程的开始、中止、暂停、恢复、停止。 、、、、 线程的、、优先...

刀狂剑痴
2016/05/02
390
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Confluence 6 配置时间和日期格式

你可以修改你 Confluence 为用户显示的时期和时间格式。设置的句法使用的是 SimpleDateFormat class,请参考 Java SimpleDateFormat 文档中的内容来设置日期和时间格式。 有下面 3 个时间和日...

honeymose
8分钟前
0
0
php seralize unserialize

关于PHP 序列化(serialize)和反序列化(unserialize)出现错误(Error at offset)的解决办法。 首先我们分析一下为什么会出现这个错误: 编码问题 UTF-8: ANSI: 我发现在我的机器上边编码改...

yeahlife
14分钟前
0
0
七、JSP九大内置对象和四个作用域

九大内置对象: request:类型是HttpServletRequest,和Servlet里的HttpServletRequest一模一样。 response:类型是HttpServletResponse,和Servlet里的HttpServletResponse一模一样。JSP里基...

Wakeeee_
18分钟前
0
0
第十四章NFS服务搭建与配置

14.1 NFS介绍 NFS介绍 NFS是Network File System的缩写;这个文件系统是基于网路层面,通过网络层面实现数据同步 NFS最早由Sun公司开发,分2,3,4三个版本,2和3由Sun起草开发,4.0开始Netap...

Linux学习笔记
50分钟前
0
0
双向认证-nginx

1、设置容器 docker run -it --name nginx-test2 -v /home/nginx:/apps -v /home/nginx/conf/nginx.conf:/etc/nginx/nginx.conf:ro -p 8183:80 -p 7443:443 -d nginx:stable 2、修改nginx配......

hotsmile
50分钟前
0
0
深入了解 Java 自动内存管理机制及性能优化

一图带你看完本文 一、运行时数据区域 首先来看看Java虚拟机所管理的内存包括哪些区域,就像我们要了解一个房子,我们得先知道这个房子大体构造。根据《Java虚拟机规范(Java SE 7 版)》的规...

Java大蜗牛
52分钟前
4
0
SpringBoot | 第六章:常用注解介绍及简单使用

前言 之前几个章节,大部分都是算介绍springboot的一些外围配置,比如日志 配置等。这章节开始,开始总结一些关于springboot的综合开发的知识点。由于SpringBoot本身是基于Spring和SpringMvc...

oKong
53分钟前
9
0
云数据库架构演进与实践

如今,大型企业如金融企业和银行等,在下一代的微服务架构转型要求下,需要基础软件和数据平台能够实现原生的云化,以满足微服务架构的需求。 微服务,也就是一种面向服务的,有特定边界的松...

巨杉数据库
54分钟前
0
0
Linux系统梳理---系统搭建(一):jdk卸载与安装

1.去官网下载符合Linux版本的jdk,暂用jdk-8u171-linux-x64.rpm 2.登陆Linux,进入usr目录,创建java目录(方便管理,可以其他位置):mkdir java 3.上传下载的jdk包至Linux服务器,使用rz指令(sz f...

勤奋的蚂蚁
今天
0
0
Linux Kernel 4.16 系列停止维护,用户应升级至 4.17

知名 Linux 内核维护人员兼开发人员 Greg Kroah-Hartman 近日在发布 4.16.18 版本的同时,宣布这是 4.16 系列的最后一个维护版本,强烈建议用户立即升级至 4.17 系列。 Linux 4.16 于 2018 年...

六库科技
今天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部