NSLock简单应用

 1 #import "AppDelegate.h"
 2
 3 @interface AppDelegate ()
 4
 5 @end
 6
 7 @implementation AppDelegate
 8
 9 -(void)dealloc{
10
11     [_window release];
12     [super dealloc];
13 }
14
15
16 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
17     self.window = [[UIWindow alloc]initWithFrame:[UIScreen mainScreen].bounds];
18     self.window.backgroundColor = [UIColor blackColor];
19
20     [self.window makeKeyAndVisible];
21
22     [_window release];
23
24     //线程互斥  线程没有自己独立的栈堆空间,都是使用进程内部的内存空间,所以有可能多个线程同时访问同一块内存,这时就会出问题,针对多线程访问共享资源是就会采用线程互斥方式,加线程锁
25     NSLock *lk = [[NSLock alloc]init];
26
27     NSThread *thread1 = [[NSThread alloc]initWithTarget:self selector:@selector(therad:) object:lk];
28
29     thread1.name = @"1号窗口";
30
31     [thread1 start];
32
33
34
35     NSThread *therad2 = [[NSThread alloc]initWithTarget:self selector:@selector(therad:) object:lk];
36
37     therad2.name = @"2号窗口" ;
38
39 //    therad2.threadPriority = 0.9 ;
40
41     [therad2 start];
42
43
44
45     NSThread *therad3 = [[NSThread alloc]initWithTarget:self selector:@selector(therad:) object:lk];
46
47     therad3.name = @"3号窗口" ;
48
49     therad3.threadPriority = 1 ;
50
51     [therad3 start];
52
53
54
55
56
57
58     return YES;
59 }
60
61
62 //模拟售票
63 -(void)therad:(id)object{
64
65     NSLock *lk = (NSLock *)object ;
66
67     //票数100张
68     static int number = 100 ;
69
70     while (1) {
71
72         // 加线程锁,提高数据访问的安全性
73         [lk lock];
74
75         number -- ;
76
77         NSLog(@"%@ %d",[[NSThread currentThread]name],number);
78
79           //休眠1秒
80         sleep(1);
81
82         if (number == 0) {
83             break ;
84         }
85
86         [lk unlock] ;
87     }
88
89 }
时间: 2024-10-26 01:18:51

NSLock简单应用的相关文章

iOS:多线程同步加锁的简单介绍

多线程同步加锁主要方式有3种:NSLock(普通锁).NSCondition(状态锁).synchronized同步代码块 还有少用的NSRecursiveLock(递归锁).NSConditionLock(条件锁).NSDistributedLock(分布锁). 区别: NSLock和NSCondition都实现<NSLocking>协议;而synchronized(锁){….}采用同步加锁的方式实现加锁,只要锁是唯一的就可以,一般设置锁为当前对象或者类名.NSLock和NSConditio

NSLock/NSRecursiveLock/NSConditionLock/@synchronized

NSLock/NSRecursiveLock/NSConditionLock/@synchronized http://blog.sina.com.cn/s/blog_8c87ba3b0101ok8y.html 使用NSLock类 在Cocoa程序中NSLock中实现了一个简单的互斥锁.所有锁(包括NSLock)的接口实际上都是通过NSLocking协议定义的,它定义了lock和unlock方法.你使用这些方法来获取和释放该锁. 除了标准的锁行为,NSLock类还增加了tryLock和lockB

iOS 多线程之NSThread简单使用

1.线程的构建和开启: (1)_thread1 = [[NSThread alloc]initWithTarget:self selector:@selector(threadOneMethod) object:nil]; _thread2 = [[NSThread alloc]initWithTarget:self selector:@selector(threadTwoMethod) object:nil]; [_thread1 start]; [_thread2 start]; 先构建,然

多线程的简单使用

NSOperationQueue的简单使用过程: 1.  建立一个NSOperationQueue的对象 2.  建立一个NSOperation的对象 3.  将operation加入到NSOperationQueue中 MRC 需要手动释放 4.  release掉operation NSOperationQueue *queue = [NSOperationQueue new]; NSInvocationOperation *operation = [[NSInvocationOperati

C# Ping 简单使用

编程过程中,有时候需要判断主机是否在线,最简单的方法就是使用Windows的Ping命令看看能否ping通.看到网上很多文章,说用C#去调用windows的ping.exe,然后解析返回的字符串.我觉得这种方式太麻烦了,就做一下简单判断,不想弄那么麻烦. 查了一下,C#专门提供了一个Ping类,与Windows下的ping命令类似: 命令空间: System.Net.NetworkInformation; 使用方法: bool online = false; //是否在线 Ping ping =

自动生成简单四则运算的C语言程序

该程序是在博客园里面找的,具体是谁的找了半天没找到,无法提供它原本的链接.由于自己写的过于简单,且有一些功能暂时无法实现,所以就找了一个来应付作业,望原谅.在这个程序的源码中我改了一个错误的地方,源码中有这样一个随机数发生器的初始化函数的语句:"srand((unsigned)time(NULL))".srand函数是随机数发生器的初始化函数.但是正确的写法应该是:srand(unsigned( time(NULL))):为了防止随机数每次重复,常常使用系统时间来初始化,即使用time

Mysql的锁机制与PHP文件锁处理高并发简单思路

以购买商品举例: ① 从数据库获取库存的数量. ② 检查一下库存的数量是否充足. ③ 库存的数量减去买家购买的数量(以每个用户购买一个为例). ④ 最后完成购买. 仅仅这几行逻辑代码在并发的情况下会出现问题,自己可以想象一下. 这里暂时就不测试了,下面会针对并发的处理给出测试结果. 创建表: CREATE TABLE `warehouse` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'id', `stock` int(11) NOT NULL

Winfrom 简单的安卓手机屏幕获取和安卓简单操作

为啥我要做这个东西了,是因为经常要用投影演示app ,现在有很多这样的软件可以把手机界面投到电脑上 ,但都要安装,比如说360的手机助手,我又讨厌安装,于是就自己捣鼓了下 做了这个东西, 实现了以下简单功能   1.屏幕获取(因为是截图方式获取的,所以有点卡顿) 2.实现点击功能,并在点击的时候出现一个手势图标,方便用户观看 3.实现简单的滑动功能 4.实现在界面上画图功能 5.实现拖拽安装apk功能 操作说明:鼠标左边 模拟手机点击,中键停止/开始刷新界面(画图的时候不能刷新),右键去掉画图内

iOS instruments之ui automation的简单使用(高手绕道)

最近使用了几次instruments中的automation工具,现记录下automation的简单使用方法,希望对没接触过自动化测试又有需求的人有所帮助.  UI 自动测试是iOS 中重要的附加功能,它由名为"Automation"的新的工具对象支持.Automation工具的脚本是用JavaScript语言编写,主要用于分析应用的性能和用户行为,模仿/击发被请求的事件,利用它可以完成对被测应用的简单的UI测试及相关功能测试. 一. 简单的录制脚本 打开xcode,这里用我为我家亲爱