iOS中常见的锁
Posted 沉江小鱼
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了iOS中常见的锁相关的知识,希望对你有一定的参考价值。
多线程的安全隐患
一块资源可能会被多个线程共享,也就是说多个线程可能会访问同一块资源。
比如多个线程同时操作同一个对象,同一个变量。
当多个线程访问同一块资源时,很容易引发数据错乱和数据安全问题。
比如一个买票问题:
#import "ViewController.h" @interface ViewController () @property (assign, nonatomic) NSInteger maxCount; @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad];
_maxCount = 20; // 线程1 [NSThread detachNewThreadSelector:@selector(run) toTarget:self withObject:nil]; // 线程2 [NSThread detachNewThreadSelector:@selector(run) toTarget:self withObject:nil]; } - (void)run{ while (1) { if (_maxCount > 0) { // 暂停一段时间 [NSThread sleepForTimeInterval:0.002]; _maxCount--; NSLog(@"卖了一张票 - %ld - %@",_maxCount,[NSThread currentThread]); }else{ NSLog(@"票卖完了"); break; } } }
输出结果:
可以看到,当多个线程同时访问同一个数据的时候,很容易出现数据错乱,资源争夺的现象。
1. @synchronized(锁对象) { // 需要锁定的代码 } 来解决
互斥锁,使用的是线程同步的技术。加锁的代码需要尽量少,这个锁
以上是关于iOS中常见的锁的主要内容,如果未能解决你的问题,请参考以下文章