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中常见的锁的主要内容,如果未能解决你的问题,请参考以下文章

深入理解 iOS 开发中的锁

谈谈iOS多线程的锁

谈谈iOS多线程的锁

iOS synchronized底层原理分析

MySQL中常见的锁

Java线程并发中常见的锁