博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
多线程 NSLock 数据加锁
阅读量:7167 次
发布时间:2019-06-29

本文共 1626 字,大约阅读时间需要 5 分钟。

hot3.png

初始化数据锁NSLock *lock =[NSLock alloc]init];数据加锁[lock lock];数据解锁[lock Unlock];
简单的模拟窗口卖票加锁#import "ViewController.h"@interface ViewController (){    int _ticketCount;//总票数        int _soldCount;//已经卖了多少张票        NSLock *_lock;//数据锁}@end@implementation ViewController- (void)viewDidLoad {    [super viewDidLoad];    // Do any additional setup after loading the view, typically from a nib.        _ticketCount = 100;        _soldCount = 0;        //初始化锁    _lock = [[NSLock alloc] init];        //第一窗口    NSThread *thread1 = [[NSThread alloc] initWithTarget:self selector:@selector(soldTicket) object:nil];        thread1.name = @"thread_1";        [thread1 start];        //第二窗口    NSThread *thread2 = [[NSThread alloc] initWithTarget:self selector:@selector(soldTicket) object:nil];        thread2.name = @"thread_2";        [thread2 start];        //第三窗口    NSThread *thread3 = [[NSThread alloc] initWithTarget:self selector:@selector(soldTicket) object:nil];        thread3.name = @"thread_3";        [thread3 start];}-(void)soldTicket{    //加锁    [_lock lock];        int current = _ticketCount;        if (current == 0) {                NSLog(@"------%@ 剩余票数:%d",[[NSThread currentThread] name],_ticketCount);                NSLog(@"-------卖的总票数:%d",_soldCount);                [_lock unlock];                return;    }        //延时卖票    [NSThread sleepForTimeInterval:0.3];        _ticketCount = current-1;        _soldCount++;        NSLog(@"------%@ 剩余票数:%d",[[NSThread currentThread] name],_ticketCount);        //解锁    [_lock unlock];        //一直卖票    [self soldTicket];}@end

 

转载于:https://my.oschina.net/LBBB/blog/1842956

你可能感兴趣的文章