//互斥锁
NSLock *_lock;
_lock = [[NSLock alloc] init];
while (1)
{
[_lock lock];
//相关操作...
[_lock unlock];
}
//条件锁
NSCondition *_condition;
_condition = [[NSCondition alloc] init];
- (void)doSomethingA
{
[_condition lock];
//...相关操作...
// A执行完毕 发送signal
[_condition signal];
[_condition unlock];
}
- (void)doSomethingB
{
[_condition lock];
//...相关操作
// 线程等待 一直等到某一个线程发送信号 signal, wait放在相关操作的后面,此处比较特殊
[_condition wait];
[_condition unlock];
}
//原子锁
@property (atomic, assign) NSInteger totalCount;
//synchronized
@synchronized(self) {
if (self.totalCount > 0) {
self.totalCount--;
} else {
break;
}
}1.为了保证性能,atomic仅针对属性的setter方法做了保护
2.共享资源时,如果涉及到属性的getter方法,可以使用互斥锁@synchronized可以保证属性在多个线程之间的读写都是安全的
3.无论是atomic还是@synchronized,使用的代价都是高昂的
4.更新UI相关操作,必须放在主线程执行。
本文详细介绍了三种常用的多线程同步机制:互斥锁、条件锁和原子锁。通过具体的代码示例展示了如何使用这些同步机制来保护共享资源,避免竞态条件,并确保线程间的正确同步。
1156

被折叠的 条评论
为什么被折叠?



