`

iOS、8大锁

    博客分类:
  • ios
 
阅读更多

 

锁是最常用的同步工具。
一段代码段在同一个时间只能允许被有限个线程访问,比如一个线程 A 进入需要保护代码之前添加简单的互斥锁,另一个线程 B 就无法访问,只有等待前一个线程 A 执行完被保护的代码后解锁,B 线程才能访问被保护代码。
八大锁如下:
NSLock、NSConditionLock、NSRecursiveLock、NSCondition、
@synchronized、dispatch_semaphore、OSSpinLock、pthread_mutex

1、NSLock

2、NSConditionLock

3、NSRecursiveLock

4、NSCondition

5、@synchronized

6、信号量(dispatch_semaphore)

  • // 1、创建一个信号,value:信号量
    dispatch_semaphore_create(<#long value#>)
  • //2、 使某个信号的信号量+1
    dispatch_semaphore_signal(<#dispatch_semaphore_t dsema#>)
  • // 3、线程执行dispatch_semaphore_wait时,会获取当前信号量,将信号量值减一,如果信号量值小于0,则等待dispatch_semaphore_signal唤醒线程;如果信号量值大于或等于0则开始执行任务
    dispatch_semaphore_wait(<#dispatch_semaphore_t dsema#>, <#dispatch_time_t timeout#>)
  • 4、正常的使用顺序是先降低然后再提高,这两个函数通常成对使用。
//初始化信号量,初始值N = 2,表示最多只允许两条线程同时获得信号量
    dispatch_semaphore_t semaphore = dispatch_semaphore_create(2);
    // 并发队列
    dispatch_queue_t conQueue = dispatch_queue_create("com.hello-world.djx", DISPATCH_QUEUE_CONCURRENT);
    for (int i = 1; i <= 5; i++) {
        dispatch_async(conQueue, ^{
          // 线程执行dispatch_semaphore_wait时,会获取当前信号量,将信号量值减一,如果信号量值小于0,则等待dispatch_semaphore_signal唤醒线程;如果信号量值大于或等于0则开始执行任务
            dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);
            NSLog(@"开始任务:%d", i);
            sleep(i);
            NSLog(@"结束任务:%d", i);
            //线程执行完任务之后调用dispatch_semaphore_signal,将信号量值加一,如果此时信号量值大于0,说明没有等待的线程,直接返回,如果此时信号量值小于或等于0,表次此前信号量已用尽,可能有正等待的线程,这时候会试图唤起等待的线程
            dispatch_semaphore_signal(semaphore);
        });
    }
 

7、OSSpinLock

8、pthread_mutex

分享到:
评论

相关推荐

    ios-指纹解锁.zip

    8. **用户体验**:在设计指纹解锁功能时,应考虑良好的用户体验。比如,提供清晰的错误提示,避免频繁的验证请求,以及尊重用户的隐私设置。 9. **安全性**:虽然生物识别技术提供了便利,但开发者也需要确保数据的...

    iOS8界面设计文件

    《iOS8界面设计文件》是针对苹果公司推出的iOS8操作系统的一款设计资源,主要包含AI源文件,适合移动端界面设计和平面设计的专业人士使用。这款设计文件由Mercury Intermedia提供,具有高质量的向量图形,确保在不同...

    ios仿照支付宝的手势解锁

    8. **状态管理(State Management)**: 需要维护用户当前的解锁状态(如正在输入、已解锁、已锁定等)。这可以通过使用枚举类型(enum)来表示,确保代码的清晰性和可读性。 9. **用户界面(User Interface)**:...

    ios-模拟滑动解锁,可自定义.zip

    描述中提到的“已封装好,可更改多种样式”意味着这个滑动解锁组件已经完成了大部分的开发工作,并且设计得足够灵活,可以适应不同的界面风格和交互效果。开发者可以通过修改参数或配置来调整解锁滑杆的颜色、形状、...

    IOS指纹解锁

    在iOS系统中,指纹解锁是一项安全...总之,iOS的指纹解锁功能通过Touch ID和Face ID提供了高效且安全的设备访问方式,极大地提升了用户体验。理解这些技术的工作原理、设置方法以及安全性,有助于更好地利用这一特性。

    ios-手势解锁.zip

    8. **性能优化**:实时追踪和验证用户手势可能会消耗一定资源,因此需要优化处理流程,避免性能瓶颈,确保解锁过程流畅。 9. **版本兼容性**:由于不同的iOS版本可能支持的手势识别功能不同,开发时要考虑版本兼容...

    ios-仿支付宝的手势解锁.zip

    8. **多线程**:为了保证用户体验,手势解锁的验证过程可能会在后台线程进行,防止阻塞主线程导致界面卡顿。 9. **状态管理**:为了跟踪用户是否已设置手势、当前解锁状态等,需要维护一些内部状态。这可以通过属性...

    iOS九宫格锁组件

    8. **测试与调试**:在实际开发中,要确保在多种设备和iOS版本上进行测试,以确保兼容性和性能。 9. **UI设计**:在自定义九宫格锁UI时,要考虑色彩搭配、图标设计以及交互反馈等,使其既美观又易于理解。可以使用...

    IOS手势锁屏

    8. **动画效果**:为了提升用户体验,可以在用户绘制过程中添加动态效果,如点的高亮、路径的跟随动画等。这可以通过Core Animation框架来实现。 9. **数据持久化**:用户的解锁手势需要被保存以便后续验证,可以...

    ios8 TouchID

    1. 设备解锁:iOS8的TouchID首次引入,用户可以通过指纹快速解锁设备,无需输入复杂的密码,极大地提高了用户体验。 2. 应用授权:TouchID允许用户使用指纹进行应用内的购买或授权操作,如在App Store下载应用、在...

    IOS应用源码——应用程序密码锁.rar

    在iOS平台上,开发一款应用程序密码锁的源码通常涉及到多个技术层面,包括用户界面设计、安全存储、身份验证以及系统集成。以下是对"IOS应用源码——应用程序密码锁"相关知识点的详细说明: 1. **用户界面设计**:...

    iOS8:A Take Control Crash Course

    ### iOS8:A Take Control Crash Course #### 一、引言 《iOS8:A Take Control Crash Course》是一本由Josh Centers编写的电子书,旨在帮助读者快速掌握苹果iOS8操作系统的新特性及其使用技巧。本书出版于2014年10...

    IOS自定义弹框公告+时间锁+跳转官网+链接,锁库名等等注意:key就是v-team-,value就是你要显示的内容.zip

    本文将围绕标题和描述中提到的"IOS自定义弹框公告+时间锁+跳转官网+链接,锁库名等等"进行详细讲解,并结合标签"C#",虽然iOS开发主要使用Objective-C或Swift,但C#在跨平台开发如Unity3D中也有应用,因此我们也将...

    ios-简单的手势解锁 (简单的画线 ).zip

    8. **性能优化**:手势识别需要在短时间内处理大量的触控事件,因此性能优化至关重要。合理地使用线程和内存管理,避免不必要的计算,可以提高应用的响应速度和流畅度。 9. **适配不同屏幕尺寸**:考虑到iOS设备有...

    IOS实现支付宝手势锁Demo

    在iOS开发中,实现支付宝手势锁功能是一项常见的需求,它为用户提供了一种便捷且安全的身份验证方式。本文将深入探讨如何在iOS应用中实现类似支付宝的手势锁功能,并结合提供的"手势锁"压缩包文件,解析其核心概念和...

    ios应用源码之应用程序密码锁 2018127

    在iOS开发中,为应用程序添加密码锁是一种常见的安全措施,它可以保护用户的隐私数据不被未经授权的人访问。这个“ios应用源码之应用程序密码锁 2018127”项目,显然提供了一个实现这一功能的源代码示例。下面我们将...

    iOS九宫格解锁小程序

    8. **数据持久化(Data Persistence)**:为了记住用户的解锁设置和历史记录,需要将这些数据存储在UserDefaults或者数据库中。可以使用NSKeyedArchiver进行序列化,将对象转换为字节流,然后存储;反序列化时使用...

    iOS8 Notification

    在iOS8系统中,苹果引入了全新的通知中心和通知处理方式,显著提升了用户与设备的交互体验。"iOS8 Notification"这一主题主要关注的是如何利用这些改进来优化应用程序的通知功能,特别是如何实现下拉快捷回复,就像...

    ios14.7真机调试包

    8. **问题排查**:如果遇到错误或问题,Xcode会提供错误信息和建议的解决方案。利用这些信息,你可以修改代码并重新部署,继续调试过程。 9. **权限设置**:对于涉及到特定系统权限的应用,如地理位置、相机等,...

Global site tag (gtag.js) - Google Analytics