首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

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

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");
        });
    }
返回列表