iOS多线程 - NSThread锁的使用(多线程资源共享的问题)
来源:互联网 发布:链表的定义node *next 编辑:程序博客网 时间:2024/05/16 09:40
之前已经了解了NSThread如何创建线程,以及线程当中的2个属性。
现在我们用一个购票案例,来模拟一下线程当中资源共享的问题。
1.创建一个售票类
//// TicketManager.h// TestThread#import <Foundation/Foundation.h>@interface TicketManager : NSObject// 开始卖票- (void)startToSale;@end
//// TicketManager.m// TestThread#import "TicketManager.h"#define TotalTickets 50 //总票数@interface TicketManager()// 剩余票数@property(nonatomic,assign) int limitTickets;// 卖出票数@property(nonatomic,assign) int saleCount;// 线程一(北京售票点)@property(nonatomic,strong)NSThread *threadBJ;// 线程二(上海售票点)@property(nonatomic,strong)NSThread *threadSH;@end@implementation TicketManager// 初始化方法中,创建2个线程- (instancetype)init{ if (self = [super init]) { self.limitTickets = TotalTickets; self.threadBJ = [[NSThread alloc] initWithTarget:self selector:@selector(sale) object:nil]; [self.threadBJ setName:@"北京售票点"]; self.threadSH = [[NSThread alloc] initWithTarget:self selector:@selector(sale) object:nil]; [self.threadSH setName:@"上海售票点"]; } return self;}// 卖票的动作- (void)sale{ while (true) { // 如果还有余票 if (self.limitTickets > 0) { [NSThread sleepForTimeInterval:0.5]; self.limitTickets--; self.saleCount = TotalTickets - self.limitTickets; NSLog(@"%@:当前余票:%d,已经售出:%d", [NSThread currentThread].name,self.limitTickets, self.saleCount); } }}// 开始卖票了(开始执行2个线程)- (void)startToSale{ [self.threadBJ start]; [self.threadSH start];}@end
2.我们到控制器里 引入这个类,调用开始卖票的方法
#import "TicketManager.h"
TicketManager *mgr = [[TicketManager alloc] init]; [mgr startToSale];
从打印的log,可以看出卖票出问题啦。
如果来解决2个售票点资源共享的问题呢?
用锁的思想。
在这里具体就是用@synchronized
,把买票的逻辑处理放入其中。
// 卖票的动作- (void)sale{ while (true) { @synchronized (self) { // 如果还有余票 if (self.limitTickets > 0) { // 这句是用来模拟卖票的时间间隔 [NSThread sleepForTimeInterval:0.5]; self.limitTickets--; self.saleCount = TotalTickets - self.limitTickets; NSLog(@"%@:当前余票:%d,已经售出:%d", [NSThread currentThread].name,self.limitTickets, self.saleCount); } } }}
这样就解决了2个线程(2个售票点)共享资源(共同售卖50张票)的问题。
0 0
- iOS多线程 - NSThread锁的使用(多线程资源共享的问题)
- 多线程资源共享的问题
- iOS多线程编程之NSThread的使用
- IOS多线程编程之NSThread的使用
- IOS多线程编程之NSThread的使用
- iOS多线程编程之NSThread的使用
- iOS多线程编程之NSThread的使用
- iOS多线程编程之NSThread的使用
- iOS多线程编程之NSThread的使用
- iOS多线程编程之NSThread的使用
- iOS多线程之NSThread的使用
- iOS多线程编程之NSThread的使用
- iOS多线程编程之NSThread的使用
- iOS多线程编程之NSThread的使用
- iOS多线程编程之NSThread的使用
- iOS多线程编程之NSThread的使用
- iOS多线程编程之NSThread的使用
- iOS多线程编程之NSThread的使用
- R之下载安装与示例
- Leetcode Best Time to Buy and Sell Stock
- [欧拉回路 dfs树] Balkan OI 2016 Acrobat
- elk 5.1 用于mysql slow 日志
- 2016-12-27
- iOS多线程 - NSThread锁的使用(多线程资源共享的问题)
- LintCode 187-加油站
- Composer构建现代PHP帝国(一)——Composer快速入门
- 【数据结构0】数据结构概述
- LayoutInflater Factory使用基础与进阶
- Python偶数奇数简单实现
- 信息检索概论总结
- 轻量级的ORM框架Peewee访问sqlite数据库
- 集合框架_产生10个1-20之间的随机数要求随机数不能重复案例