知识点总结

iOS 开发中用到的锁

2019-04-24  本文已影响0人  飞不越疯人院

开发中可能用过的锁

1. @synchronized()

作用是创建一个互斥锁; @synchronized(OC对象,一般用self) { //code }创建一个互斥锁保护对象确保同时只有一个线程在操作它;
能有效防止多线程抢夺资源造成的数据安全问题;但是会耗费大量CPU资源;

///如果不对getter方法加上@synchronized锁, 程序无法运行;
- (void)synchronizedLockCase {
    for (int i = 0; i < 5; i ++) {
        dispatch_async(dispatch_get_global_queue(0, 0), ^{
            if (i % 2==0) {
                [self.dataArr addObject:@"ABC"];
            }else {
                [self.dataArr addObject:@"EFG"];
            }
            NSLog(@"%@___", [NSThread currentThread]);
        });
    }

}

#pragma mark    getter
- (NSMutableArray *)dataArr {
    @synchronized (self) {
        if (!_dataArr) {
            _dataArr = [NSMutableArray arrayWithCapacity:0];
        }
        return  _dataArr;
    }
}
2. NSLock

遵循 NSLocking 协议;同一线程不能多次调用lock方法,否则会死锁;

#加锁
- (void)lock;
#解锁
- (void)unlock;
#不阻塞线程尝试加锁, 能成功返回YES, 否则返回NO
- (BOOL)tryLock;
#阻塞线程在指定的时间前尝试加锁, 成功返回YES, 否则返回NO;
- (BOOL)lockBeforeDate:(NSDate *)limit;

文中示例代码

上一篇下一篇

猜你喜欢

热点阅读