iOS锁

作者: 风轻知道 | 来源:发表于2018-01-30 09:47 被阅读9次

常见锁代码

多线程场景不可避免需要使用锁来解决数据竞争、并发访问等问题,iOS 开发中,你会接触到各种各样的锁,不同的锁有不同的使用场景和性能差异。这里记录下各种锁及其使用方法,方便的大家查询使用。

自旋锁

    // 自旋锁,性能最高,但已被证明不再安全
   {
        OSSpinLock lock = OS_SPINLOCK_INIT;
        for (int i = 0; i < count; i++) {
            OSSpinLockLock(&lock);
            // 待加锁的代码
            OSSpinLockUnlock(&lock);
        }
    }

信号量锁

    // 信号量锁,性能较高
    {
        dispatch_semaphore_t lock =  dispatch_semaphore_create(1);
        for (int i = 0; i < count; i++) {
            dispatch_semaphore_wait(lock, DISPATCH_TIME_FOREVER);
            // 待加锁的代码
            dispatch_semaphore_signal(lock);
        }
    }

互斥锁

    // 互斥锁,性能较高
    {
        pthread_mutex_t lock;
        pthread_mutex_init(&lock, NULL);
        for (int i = 0; i < count; i++) {
            pthread_mutex_lock(&lock);
            // 待加锁的代码
            pthread_mutex_unlock(&lock);
        }
    }

条件锁

    // 条件锁
    {
        NSCondition *lock = [NSCondition new];
        for (int i = 0; i < count; i++) {
            [lock lock];
            // 待加锁的代码
            [lock unlock];
        }
    }

普通锁

    // 普通锁
    {
        NSLock *lock = [NSLock new];
        for (int i = 0; i < count; i++) {
            [lock lock];
            // 待加锁的代码
            [lock unlock];
        }
    }

递归锁

    // 递归锁
    {
        NSRecursiveLock *lock = [NSRecursiveLock new];
        for (int i = 0; i < count; i++) {
            [lock lock];
            // 待加锁的代码
            [lock unlock];
        }
    }

条件锁

    // 条件锁
    {
        NSConditionLock *lock = [[NSConditionLock alloc] initWithCondition:1];
        for (int i = 0; i < count; i++) {
            [lock lock];
            // 待加锁的代码
            [lock unlock];
        }
    }

其它

    // 普通锁,性能最差
    {
        NSObject *lock = [NSObject new];
        for (int i = 0; i < count; i++) {
            @synchronized(lock) {
                   // 待加锁的代码
            }
        }
    }

相关文章

  • iOS锁系列-目录

    1、 iOS锁系列-NSLock对象锁2、iOS锁系列-NSConditionLock条件锁3、iOS锁系列-NS...

  • 起底多线程同步锁(iOS)

    起底多线程同步锁(iOS) 起底多线程同步锁(iOS)

  • iOS 中常见的几种锁-代码示例

    iOS 中常见的几种锁-代码示例 iOS 中常见的几种锁-代码示例

  • OC--各种线程锁

    参考:正确使用多线程同步锁@synchronized()iOS中的锁iOS多线程安全详解iOS 常见知识点(三):...

  • 多线程 (三)iOS中的锁

    ios 多线程--锁

  • iOS 锁

    iOS Lock(锁) 主要介绍常见的锁,以及synchronized、NSLock、递归锁、条件锁的底层分析 借...

  • iOS-锁

    iOS开发中知道的哪些锁? 哪个性能最差? 锁是线程编程同步工具的基础。iOS开发中常用的锁有如下几种: @syn...

  • iOS中的锁笔记

    本文只是我对iOS中锁的学习笔记,没有太深入的研究讲解。先来一张ios中常用锁的性能对照图 锁的分类 自旋锁:在未...

  • iOS和Android代码中实现禁止手机休眠

    (一)iOS平台默认,所有iOS设备在过了设定的休眠时间后,都会自动锁屏。如果你的应用不希望iOS设备自动锁屏,需...

  • iOS的线程安全与锁

    iOS的线程安全与锁

网友评论

      本文标题:iOS锁

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