2019独角兽企业重金招聘Python工程师标准>>>

//

//  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];

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

//当一个线程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

转载于:https://my.oschina.net/u/2483781/blog/551185

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

  1. 利用锁机制解决商品表和库存表并发问题

    利用锁机制解决商品表和库存表并发问题 参考文章: (1)利用锁机制解决商品表和库存表并发问题 (2)https://www.cnblogs.com/hgj123/p/4817923.html 备忘一下 ...

  2. [java多线程] - 锁机制同步代码块信号量

    在美眉图片下载demo中,我们可以看到多个线程在公用一些变量,这个时候难免会发生冲突.冲突并不可怕,可怕的是当多线程的情况下,你没法控制冲突.按照我的理解在java中实现同步的方式分为三种,分别是:同 ...

  3. educoder 使用线程锁(lock)实现线程同步_Python并行编程(二):多线程锁机制利用Lock与RLock实现线程同步

    什么是锁机制? 要回答这个问题,我们需要知道为什么需要使用锁机制.前面我们谈到一个进程内的多个线程的某些资源是共享的,这也是线程的一大优势,但是也随之带来一个问题,即当两个及两个以上的线程同时访问共享 ...

  4. python3多线程----锁机制

    #!/usr/bin/env python3 # -*- coding: utf-8 -*- # Version: python 3.6.3 # Tools: Pycharm 2017.3.3 __d ...

  5. 巧用MySQL InnoDB引擎锁机制解决死锁问题

    案例如下: 在使用Show innodb status检查引擎状态时,发现了死锁问题: *** (1) TRANSACTION: TRANSACTION 0 677833455, ACTIVE 0 s ...

  6. 锁锁锁-多线程锁-多进程锁

    锁是什么 锁在现实生活意义在于通过加锁的方式达到隐私保护或者独占的意义. 锁在程序世界里,加锁是方法,目的在于①独占②同步. 多线程锁–锁的源起 1.为了尽可能压榨CPU资源,神奇的码农们发明了轻量级 ...

  7. MySQL数据库读现象 数据库锁机制 Innodb存储引擎行级锁

    数据库读现象 数据库管理软件的"读现象"指的是当多个事务并发执行时,在读取数据方面可能碰到的问题,包括有脏读.不可重复读和幻读. 创建数据表 # 创建数据表 create tabl ...

  8. Redis的事务和锁机制(乐观锁和悲观锁)

    Redis学习笔记(四) 1,Redis事务的定义 2,Redis事务操作的三个基本命令 3,解决Redis中的事务冲突(乐观锁和悲观锁) 3.1,悲观锁 3.2,乐观锁 3.3,Redis中使用乐观 ...

  9. MySQL数据库:锁机制

    当数据库中多个事务并发存取同一数据的时候,若对并发操作不加控制就可能会读取和存储不正确的数据,破坏数据库的一致性.MySQL锁机制的基本工作原理就是,事务在修改数据库之前,需要先获得相应的锁,获得锁的 ...

最新文章

  1. load data with matlab
  2. PHP ‘ext/soap/soap.c’权限许可和访问控制
  3. matlab格拉姆施密特,改进的格拉姆-施密特正交化(modified Gram-Schmidt Process)
  4. oracle11g知乎,【AAAI】AAAI2020录用论文汇总(二)
  5. jQuery笔记总结篇
  6. Synchronize使用
  7. Mybatis注解实现一对多关联映射(@Many)
  8. C++(STL):22 ---序列式容器queue使用
  9. XML文件的写入和读取(解析)基于DOM4J工具
  10. 如何在Mac上安装Node.js和NPM
  11. Flex弹性布局_思维导图
  12. vue-router判断页面未登录时,自动跳转到登录页
  13. HALCON 21.11:深度学习笔记---有监督训练(6)
  14. C++文本处理造轮子
  15. 《An Introduction to Ray Tracing》—— 2.4 Ray/Box Intersection
  16. 使用AXI Verifcation IP进行系统验证
  17. 又是一年“剁手”时,AI一下更优惠?
  18. l310加完墨水后需要怎样设置_epsonl310打印机怎么补充墨水?
  19. Arduino应用开发——手机APP控制LED
  20. python70行代码爬取链家网上万条租房数据——北京各地区租房信息

热门文章

  1. ios11+html5偏移20pt,iOS tableView内容向下偏移20pt或向下偏移64pt的问题?
  2. SSH下know_hosts的作用(转)
  3. 君信财富获数千万元战略投资,投资方为银江集团
  4. 企业级 SpringCloud 教程 (五)路由网关(zuul)
  5. P1024 一道naive的二分
  6. Java网络连接之HttpURLConnection、HttpsURLConnection
  7. SpringMvc自定义参数绑定
  8. 在 Coding 上搭建 Hexo 个人博客!
  9. 传输层学习之五(TCP的SACK,F-RTO)
  10. 来自内部的XSS攻击的防范