博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iOS OS X 和 iOS 中的多线程技术-3 (NSThread)
阅读量:4066 次
发布时间:2019-05-25

本文共 1035 字,大约阅读时间需要 3 分钟。

//联系人:石虎 QQ:1224614774 昵称:嗡嘛呢叭咪哄

一、NSThread

    NSThread 是 OS X 和 iOS 都提供的一个线程对象,它是线程的一个轻量级实现。在执行一些轻量级的简单任务时,NSThread 很有用,但用户仍然需要自己管理线程生命周期,进行线程间同步。比如,线程状态,依赖性,线程间同步等线程相关的主题 NSThread 都没有涉及。比如,涉及到线程间同步仍然需要配合使用 NSLock,NSCondition 或者 @synchronized。所以,遇到复杂任务时,轻量级的 NSThread 可能并不合适。

 

   提供一个模拟多线程运作的简单例子:两个人同时一起到烤箱抢面包。我们启动两个线程,来代表两个人。由于烤箱门比较小,同时只能有一个人去拿面包。由于 NSThread 不处理线程同步,所以为了模拟这个过程, 你还需要一把线程锁(即类型为 NSLock 的实例变量 _lock)。在后面的 run 方法中会用到这把线程锁:

 

 _lock = [[NSLock alloc] init];

 

 NSThread *geroge = [[NSThread alloc] itWithTarget:self selector:

 @selector(run) object:nil];

 [geroge setName:@"Geroge"];

 [geroge start];

 

 NSThread *totty = [[NSThread alloc] nitWithTarget:self selector:

 @selector(run)  object:nil];

 [totty setName:@"Totty"];

 [totty start];

二、代码实现

 受到线程锁保护的拿面包过程可以用下面的 run 方法表示:

 

 - (void)run {

 while (TRUE) {

 

 [_lock lock];

 if(_cake > 0){

 [NSThread sleepForTimeInterval:0.5];

 _cake--;

 _occupied = kSum - _cake;

 NSLog(@"Taken by %@\nCurrent free:%ld, occupied:

 %ld", [[NSThread currentThread] name], _cake, _occupied);

 

 }

 [_lock unlock];

 }

 }

谢谢!!!

转载地址:http://whtji.baihongyu.com/

你可能感兴趣的文章
java http / Cache / Protocol / Client / Session / Cokie / Status / HttpClient
查看>>
IBM WebSphere Commerce backend dev
查看>>
script js base
查看>>
java books
查看>>
project docment_tools VSS / CVS / SVN / ClearCase / Hudson / GIT
查看>>
test_tools LoadRunner / QTP / webbench / Apache AB / CBenchmark / http_load
查看>>
jvm_tool jconsole/ jprofiler/ JProbe/ VirtualVm/ TPV/ YourKit/ ITCAM/ MAT/ MDD4J
查看>>
IBM WebSphere Performance Tool / ISA / jca457.jar / ha456.jar / ga439.jar
查看>>
IBM WebSphere Commerce Front_dev
查看>>
IBM WebSphere Commerce Developer Business Edition
查看>>
IBM Tivolli Composite Application Manager / IBM ITCAM
查看>>
IBM WebSphere Commerce Analyzer
查看>>
Unix + OS IBM Aix System Director
查看>>
Unix + OS IBM Aix FTP / wu-ftp / proftp
查看>>
framework apache commons
查看>>
my read work
查看>>
blancerServer IBM WebSphere Edge Server 6.1
查看>>
db db2 base / instance database tablespace container
查看>>
my read _job
查看>>
hd disk / disk raid / disk io / iops / iostat / iowait / iotop / iometer
查看>>