iOS OS X 和 iOS 中的多线程技术-3 (NSThread)

来源:互联网 发布:中国银行淘宝卡 编辑:程序博客网 时间:2024/06/05 04:58

//联系人:石虎 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];

 }

 }


谢谢!!!


原创粉丝点击