Heim > Fragen und Antworten > Hauptteil
怪我咯2017-04-18 09:24:15
方法级别的控制没有语言级别的修饰符,可以将代码块加锁。
加锁的方法很多。
@synchronized
NSLock
pthread_mutex
dispatch_semaphore
OSSpinLock
@interface A : NSObject {
NSObject _lock;
}
- (void)func {
@synchronized(_lock) {
// do something
}
}
- (void) func {
[_lock lock];
// do something
[_lock unlock];
}
@interface A : NSObject {
pthread_mutex_t lock;
}
- (instance)init {
// 省略
pthread_mutex_init(&_lock, NULL);
}
- (void)func {
pthread_mutex_lock(&lock);
// do something
pthread_mutex_unlock(&lock);
}
@interface A : NSObject {
dispatch_semaphore_t _semaphore;
}
- (instance)init {
// 省略
_semaphore = dispatch_semaphore_create(1);
}
- (void)func {
dispatch_semaphore_wait(_semaphore, DISPATCH_TIME_FOREVER);
// do something
dispatch_semaphore_signal(_semaphore);
}
由于自旋锁在iOS中不再安全,这边也不介绍了,具体可以看这篇博客
不再安全的 OSSpinLock