Board logo

标题: iOS 中常见的几种锁-代码示例(1) [打印本页]

作者: look_w    时间: 2019-3-10 14:19     标题: iOS 中常见的几种锁-代码示例(1)

1. iOS中的互斥锁

    在编程中,引入对象互斥锁的概念,来保证共享数据操作的完整性。每个对象都对应于一个可称为“互斥锁”的标记,这个标记用来保证在任一时刻,只能有一个线程访问对象。

1.1 @synchronized (self)

    - (void)lock1 {
        @synchronized (self) {
            // 加锁操作
        }
    }
    复制代码

1.2 NSLock

    - (void)lock2 {
        NSLock *xwlock = [[NSLock alloc] init];
        XWLogBlock logBlock = ^ (NSArray *array) {
            [xwlock lock];
            for (id obj in array) {
                NSLog(@"%@",obj);
            }
            [xwlock unlock];
        };
        
        dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
            NSArray *array = @[@1,@2,@3];
            logBlock(array);
        });
    }
    复制代码

1.3 pthread

    pthread除了创建互斥锁,还可以创建递归锁、读写锁、once等锁

     
        __block pthread_mutex_t mutex;
        pthread_mutex_init(&mutex, NULL);
        
        dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
            NSLog(@"+++++ 线程1 start");
            pthread_mutex_lock(&mutex);
            sleep(2);
            pthread_mutex_unlock(&mutex);
            NSLog(@"+++++ 线程1 end");
        });
        
        dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
            NSLog(@"----- 线程2 start");
            pthread_mutex_lock(&mutex);
            sleep(3);
            pthread_mutex_unlock(&mutex);
            NSLog(@"----- 线程2 end");
        });
    }




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0