美文网首页
objective-c的锁

objective-c的锁

作者: Asteriskjs | 来源:发表于2019-10-31 09:21 被阅读0次

objc里面的锁有很多种。

1.@property里面默认atomic:很少使用,因为效率问题
2.NSLock:很少使用,AFNetworking项目里面只能找到2个NSLock对象
3.GCD同步模拟锁:AFNetworking项目见到

//定义

dispatch_queue_t _conversationListQueue;//会话处理并发队列 安全机制参考自AFNetworking3.x

//初始化

_conversationListQueue = dispatch_queue_create("com.citylife.sdk.ios.conversationListQueue", DISPATCH_QUEUE_CONCURRENT);
//使用1

dispatch_barrier_sync(self->_conversationListQueue, ^{
        xxx

});
//使用2

dispatch_sync(self->_conversationListQueue, ^{
        xxx

});

4.信号量模拟锁:SDWebImage项目里见到

//定义信号量

@property (nonatomic, strong, nonnull) dispatch_semaphore_t weakCacheLock; // a lock to keep the access to `weakCache` thread-safe

//初始化信号量

self.weakCacheLock = dispatch_semaphore_create(1);
//使用宏定义模拟锁

SD_LOCK(self.weakCacheLock);
[self.weakCache setObject:obj forKey:key];

SD_UNLOCK(self.weakCacheLock);
//宏定义

#ifndef SD_LOCK

#define SD_LOCK(lock) dispatch_semaphore_wait(lock, DISPATCH_TIME_FOREVER);
#endif

#ifndef SD_UNLOCK

#define SD_UNLOCK(lock) dispatch_semaphore_signal(lock);
#endif

相关文章

  • OC @synchronized

    objective-c @synchronized 锁用法 Objective-C除了提供异常处理机制外,还提供了...

  • @synchronized 的原理探究

    使用 @synchronized (递归互斥锁) Objective-C 代码中动态创建互斥锁的便捷方式。该 @...

  • objective-c的锁

    objc里面的锁有很多种。 1.@property里面默认atomic:很少使用,因为效率问题2.NSLock:很...

  • iOS 中的锁(1)

    iOS 中的锁(1) 本文主要通过Objective-C语言进行体现,其实跟Swift也差不多。 本文从锁的基本概...

  • Objective-C中的同步锁

    Objective-C中的同步锁 在 Objective-C 中,如果有多个线程执行同一份代码,那么有可能会出现线...

  • iOS 中的锁(4)

    iOS 中的锁(4) 不想篇幅太长,再开一篇继续探究iOS中的锁。 注:本文主要通过Objective-C语言进行...

  • iOS 中的锁(2)

    iOS 中的锁(2) 不想篇幅太长,再开一篇继续探究iOS中的锁。 注:本文主要通过Objective-C语言进行...

  • iOS 中的锁(3)

    iOS 中的锁(3) 不想篇幅太长,再开一篇继续探究iOS中的锁。 注:本文主要通过Objective-C语言进行...

  • Objective-c 中的锁

    1.Mutex 互斥锁.互斥锁同一时间只运行同一个线程操作,如果当一个线程正在持有锁,其他的线程想要持有锁,其他的...

  • 更高效的同步锁-GCD 同步锁

    本文整理自《Effective Objective-C 2.0》,通过分析比较不同的同步锁的优缺点,使用GCD方法...

网友评论

      本文标题:objective-c的锁

      本文链接:https://www.haomeiwen.com/subject/ccezvctx.html