美文网首页HTML5 专栏
iOS OS X 和 iOS 中的多线程技术-3 (NSThre

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

作者: 石虎132 | 来源:发表于2017-11-25 14:26 被阅读127次

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

}

}

谢谢!!!

相关文章

网友评论

    本文标题:iOS OS X 和 iOS 中的多线程技术-3 (NSThre

    本文链接:https://www.haomeiwen.com/subject/pprcbxtx.html