美文网首页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