场景:比较轻量级的,多线程使用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的使用]所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)