日常开发中,都使用过哪些锁?

2020-03-20  本文已影响0人  小白PK大牛

1.@synchronized

一般在创建单例对象的时候使用,多线程环境下创建线程是唯一的。

2.atomic

修饰属性的关键字,对被修饰对象进行原子操作(不负责使用)

@property(atomic) NSMutableArray *array;
//这样保证线程的安全性
self.array = [NSMutableArray array];
//不能保证线程安全的
[self.array addObject:obj];

3.OSSpinLock(自旋锁)

循环等待访问,不释放当前资源,用于轻量级数据访问(引用计数+1/-1操作)

4.NSLock(对象锁)

-(void)A{
    [lock lock];
    [self B];
    [lock unlock];
}

-(void)B{
   [lock lock];
   //操作逻辑
   [lock unlock];
}

//导致死锁

5.NSRecursiveLock(递归锁)

-(void)A{
    [recursiveLock lock];
    [self B];
    [recursiveLock unlock];
}

-(void)B{
   [recursiveLock lock];
   //操作逻辑
   [recursiveLock unlock];
}

递归锁的特点就是重入

6.dispatch_semaphore_t(信号量)

dispatch_semaphore_create(1);
dispatch_semaphore_wait(semaphore,DISPATCH_TIME_FOREVER);
dispatch_semaphore_signal(semaphore);
上一篇 下一篇

猜你喜欢

热点阅读