浅谈浅谈iOS中的锁的介绍及使用中的锁的介绍及使用
本篇文章主要介绍了浅谈iOS中的锁的介绍及使用,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看
看吧
在平时的开发中经常使用到多线程,在使用多线程的过程中,难免会遇到资源竞争的问题,那我们怎么来避免出现这种问题那?
线程安全是什么?线程安全是什么?
当一个线程访问数据的时候,其他的线程不能对其进行访问,直到该线程访问完毕。简单来讲就是在同一时刻,对同一个数据操作的线程只有一个。
只有确保了这样,才能使数据不会被其他线程影响。而线程不安全,则是在同一时刻可以有多个线程对该数据进行访问,从而得不到预期的结果。
比如写文件和读文件,当一个线程在写文件的时候,理论上来说,如果这个时候另一个线程来直接读取的话,那么得到的结果可能是你无法预料的。
怎么来保证线程安全?怎么来保证线程安全?
通常我们使用锁的机制来保证线程安全,即确保同一时刻只有同一个线程来对同一个数据源进行访问。
YY大神 的 不再安全的 OSSpinLock 这边博客中列出了各种锁以及性能比较:
性能对比
这里性能比较的只是加锁立马解锁的时间消耗,并没有计算竞争时候的时间消耗。
锁的介绍及简单使用锁的介绍及简单使用
1.@synchronized
@synchronized是 iOS 中最常见的锁,用法很简单:
- (void)viewDidLoad {
[super viewDidLoad];
[self synchronized];
}
- (void)synchronized {
NSObject * cjobj = [NSObject new];
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
@synchronized(cjobj){
NSLog(@"线程1开始");
sleep(3);
NSLog(@"线程1结束");
}
});
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{