[Cocoa]_[初级]_[NSThread的使用]

[Cocoa]_[初级]_[NSThread的使用],第1张

概述场景:比较轻量级的,多线程使用NSThread,一般配合NSLock(锁),NSConditon(条件变量)使用 缺点:需要自己管理线程的生命周期,线程同步。线程同步对数据的加锁会有一定的系统开销。 以下用卖票作为例子进行该知识点的应用 头文件 #import <Cocoa/Cocoa.h>@interface ThreadBase : NSObject{ int tickets;

场景:比较轻量级的,多线程使用NSThread,一般配合NSLock(锁),NSConditon(条件变量)使用

缺点:需要自己管理线程的生命周期,线程同步。线程同步对数据的加锁会有一定的系统开销。

以下用卖票作为例子进行该知识点的应用

头文件

#import <Cocoa/Cocoa.h>@interface ThreadBase : NSObject{    int tickets;    int iCount;    NSThread* threadone;    NSThread* threadtwo;    NSCondition* theCondition;    NSLock *theLock;}@end

源文件

#import "ThreadBase.h"@implementation ThreadBase-(voID)awakeFromNib{    tickets = 20;    iCount = 0;        // 锁对象和条件变量    theLock = [[NSLock alloc] init];    theCondition = [[NSCondition alloc] init];        //创建三个线程    threadone = [[NSThread alloc] initWithTarget:self selector:@selector(customerTickets) object:nil];    [threadone setname:@"Thread-1"];    [threadone start];    threadtwo = [[NSThread alloc] initWithTarget:self selector:@selector(customerTickets) object:nil];    [threadtwo setname:@"Thread-2"];    [threadtwo start];    NSThread *threadthree = [[NSThread alloc] initWithTarget:self selector:@selector(threadLock) object:nil];    [threadthree setname:@"Thread-3"];    [threadthree start];    }-(voID)threadLock{    while (true)    {        //对线程进行加锁        [theCondition lock];        [NSThread sleepForTimeInterval:1.0];        [theCondition signal];        [theCondition unlock];    }}-(voID)customerTickets{    while (true)    {        // 上锁        [theCondition lock];        [theLock lock];        if(tickets >= 0){            [NSThread sleepForTimeInterval:0.09];            iCount = 20 - tickets;            NSLog(@"当前票数是:%d,售出:%d,线程名:%@",tickets,iCount,[[NSThread currentThread] name]);            tickets--;        }else{            //结束线程            break;        }        [theLock unlock];        [theCondition unlock];    }}@end

运行结果:

@H_301_48@ @H_301_51@ 总结

以上是内存溢出为你收集整理的[Cocoa]_[初级]_[NSThread的使用]全部内容,希望文章能够帮你解决[Cocoa]_[初级]_[NSThread的使用]所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1051659.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-25
下一篇 2022-05-25

发表评论

登录后才能评论

评论列表(0条)

保存