用GCD实现同步锁
来源:互联网 发布:三国霸业源码 编辑:程序博客网 时间:2024/06/04 21:12
如果多个线程同时执行同一份代码时很容易出问题,所以通常情况下,我们会用加锁的办法实现同步机制。
1.@synchronized(){}
系统自动创建一个锁,等到其中代码执行完之后,锁就会被释放。
2.手动加锁,NSLock 等,在执行代码前后分别调用lock 和 unlock 方法进行加锁和释放。
以上两种方法,都可以保证能同步运行所要执行的方法,但是如果频繁使用会降低代码效率。
现在可以用GCD来实现同步锁的功能,这样更简单有效。
比如要实现属性写入和读取方法,用以上的方法可以这么实现:
- (void)setTestStr:(NSString *)testStr { @synchronized (self) { _testStr = testStr; }}- (NSString *)testStr { @synchronized (self) { return _testStr; }}
换一个思路,我们可以创建一个并发队列,将写入和读取操作放到同一个队列中进行,保证读取和写入操作分开,就是在写入操作进行的时候不能进行读取操作。
dispatch_queue_t quene = dispatch_get_global_queue(0, 0);- (void)setTestStr:(NSString *)testStr { dispatch_barrier_async(quene, ^{ _testStr = testStr; });}- (NSString *)testStr { __block NSString *tempStr; dispatch_sync(quene, ^{ tempStr = _testStr; }); return tempStr;}
如上述代码所示,同步读取,异步栅栏写入。 dispatch_barrier_async
方法执行的代码块在队列中不能和其他代码块并列执行,他会等当前存在的所有操作执行完,然后单独执行。
0 0
- 用GCD实现同步锁
- GCD 实现同步锁
- Effective Objective-C Notes:GCD 实现同步锁
- Effective Objective-C Notes:GCD 实现同步锁
- 使用 GCD 的 dispatch queue 实现同步锁
- Effective Objective-C Notes:GCD 实现同步锁
- iOS的GCD怎么样实现同步
- GCD的同步异步串行并行、NSOperation和NSOperationQueue一级用dispatch_once实现单例
- GCD下的几种实现同步的方式
- GCD下的几种实现同步的方式
- GCD实现异步任务同步的两种方式
- 使用GCD 信号量来实现iOS 同步网络请求
- 【iOS沉思录】GCD实现线程同步的方法
- 【iOS开发-91】GCD的同步异步串行并行、NSOperation和NSOperationQueue一级用dispatch_once实现单例
- gcd的同步异步
- GCD同步问题
- GCD同步异步
- GCD 线程同步
- Tomcat和Apache
- 关于PHP开启缓冲函数系列函数
- serialVersionUID作用
- 使用Android Studio调试内存问题
- Smart View的客户化开发
- 用GCD实现同步锁
- android 调用系统相册选取照片或者打开相机拍照获取图片
- String.Format方法
- 解决Fresco与高德地图或者是百度地图冲突的问题
- 图像二值化----otsu(最大类间方差法、大津算法)
- rabbitMQ第五篇:Spring集成RabbitMQ
- 推导基姆拉尔森公式根据日期计算星期
- java高级_工具类 _Object类
- Java编程思想(二)--一切都是对象