iOS中几种锁的简单介绍

多线程编程可以充分利用多核CPU的性能,提供资源的利用率能够提高程序的运行效率,使程序响应更快。但同时也带来了一些弊端:资源的竞争,死锁等。多线程编程中,应该尽量避免资源在线程之间共享,以减少线程间的相互作用。 但是总是有多个线程相互干扰的情况(如多个线程访问一个资源)。在线程必须交互的情况下,就需要一些同步工具,来确保当它们交互的时候是安全的。

锁是线程编程同步工具的基础。iOS开发中常用的锁有如下几种:

@synchronized

NSLock 对象锁

NSRecursiveLock 递归锁

NSConditionLock 条件锁

pthread_mutex 互斥锁(C语言)

dispatch_semaphore 信号量实现加锁(GCD)

OSSpinLock

@synchronized 关键字加锁 互斥锁,性能较差不推荐使用**


** NSLock 互斥锁 不能多次调用 lock方法,会造成死锁**

在Cocoa程序中NSLock中实现了一个简单的互斥锁。

所有锁(包括NSLock)的接口实际上都是通过NSLocking协议定义的,它定义了lock和unlock方法。你使用这些方法来获取和释放该锁。

NSLock类还增加了tryLock和lockBeforeDate:方法。

tryLock试图获取一个锁,但是如果锁不可用的时候,它不会阻塞线程,相反,它只是返回NO。

lockBeforeDate:方法试图获取一个锁,但是如果锁没有在规定的时间内被获得,它会让线程从阻塞状态变为非阻塞状态(或者返回NO)。



dispatch_semaphore 信号量实现加锁

GCD中也已经提供了一种信号机制,使用它我们也可以来构建一把”锁”


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 锁是一种同步机制,用于多线程环境中对资源访问的限制iOS中常见锁的性能对比图(摘自:ibireme): iOS锁的...
    LiLS阅读 5,412评论 0 6
  • 在平时的开发中经常使用到多线程,在使用多线程的过程中,难免会遇到资源竞争的问题,那我们怎么来避免出现这种问题那? ...
    IAMCJ阅读 8,331评论 2 25
  • 线程安全是怎么产生的 常见比如线程内操作了一个线程外的非线程安全变量,这个时候一定要考虑线程安全和同步。 - (v...
    幽城88阅读 3,907评论 0 0
  • demo下载 建议一边看文章,一边看代码。 声明:关于性能的分析是基于我的测试代码来的,我也看到和网上很多测试结果...
    炸街程序猿阅读 4,174评论 0 2
  • 题记:我的上两篇文Rome Was Not Built In a Day和Great Haste Makes Gr...
    欣兴妈妈阅读 5,115评论 0 1