博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iOS线程锁简单样例
阅读量:6936 次
发布时间:2019-06-27

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

hot3.png

#import "ViewController.h"@interface ViewController (){    NSInteger _cnt;    NSLock *_lock;}@end@implementation ViewController- (void)viewDidLoad {    [super viewDidLoad];    //必须先创建锁    _lock = [[NSLock alloc] init];        [NSThread detachNewThreadSelector:@selector(thread1Click) toTarget:self withObject:nil];    [NSThread detachNewThreadSelector:@selector(thread2Click) toTarget:self withObject:nil];}/* 下面两个线程 执行的函数 共同操作同一个资源变量 如果我们不做任何处理 那么两个线程就会争抢资源,这样就达不到我们想要的效果,数据有可能导致比较混乱  //如果两个线程要操作同一个资源,那么我们一般要进行加锁保护,当访问资源的时候进行加锁,访问结束 解锁  */#pragma mark - 子线中调用的函数//线程1想做 两次执行 之间 间隔10- (void)thread1Click{    NSLog(@"线程1开始");    //加锁    /*     一旦线程 执行 [_lock lock],先检测一下 有没有加锁,如果加锁那么当前线程就会阻塞 直到 这个锁解锁之后 才能继续执行,如果 锁 没有锁着,立即加上锁锁住继续执行下面的代码     同一个资源多个线程必须是同一把锁               //加锁的话要注意防止死锁     */    [_lock lock];    for (NSInteger i = 0; i < 10; i++) {        _cnt += 10;        NSLog(@"%s_cnt:%ld",__func__,_cnt);        [NSThread sleepForTimeInterval:0.5];    }            [_lock unlock];    NSLog(@"线程1即将结束");}//线程2想要的现象是 每次间隔2- (void)thread2Click{    NSLog(@"线程2开始");        [_lock lock];    for (NSInteger i = 0; i < 10; i++) {        _cnt -= 2;        NSLog(@"%s_cnt:%ld",__func__,_cnt);        [NSThread sleepForTimeInterval:0.5];    }    [_lock unlock];        NSLog(@"线程2即将结束");}- (void)didReceiveMemoryWarning {    [super didReceiveMemoryWarning];    // Dispose of any resources that can be recreated.}@end

转载于:https://my.oschina.net/u/2410306/blog/529420

你可能感兴趣的文章
实验一
查看>>
JavaWeb系列之:Servlet
查看>>
【转】java线程系列---Runnable和Thread的区别
查看>>
微信公众号开发之微信JSSDK
查看>>
函数式编程(小练习)
查看>>
Git 创建两个“本地分支”协同工作
查看>>
she
查看>>
JS脚本调试
查看>>
病毒实验二
查看>>
IOS开发中的变量、方法、属性
查看>>
IT风险管理专家CISRE认证
查看>>
yii redirect
查看>>
uva-10954-贪心
查看>>
wxPython笔记
查看>>
使用 邮箱配置 激活码 用于 用户注册激活
查看>>
Recover Binary Search Tree
查看>>
Linux之因BASH造成的键盘错误和环境问题
查看>>
RBAC权限设计实例(转)
查看>>
JavaScript求当月天数
查看>>
一个典型的后台软件系统的设计复盘——(二)如何id一个事物
查看>>