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锁

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