拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...
Le contrôle au niveau de la méthode n'a pas de modificateurs au niveau du langage et les blocs de code peuvent être verrouillés.
Il existe de nombreuses façons de verrouiller.
@synchronisé
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); }
Étant donné que le verrouillage rotatif n'est plus sûr dans iOS, il ne sera pas présenté ici. Pour plus de détails, vous pouvez lire ce blog OSSpinLock n'est plus sûr
GCD+bloc pour
.
Le contrôle au niveau de la méthode n'a pas de modificateurs au niveau du langage et les blocs de code peuvent être verrouillés.
Il existe de nombreuses façons de verrouiller.
@synchronisé
NSLock
pthread_mutex
dispatch_semaphore
OSSpinLock
1. @synchronisé
2.NSLock
3. pthread_mutex
4. dispatch_semaphore
5.OSSpinLock
Étant donné que le verrouillage rotatif n'est plus sûr dans iOS, il ne sera pas présenté ici. Pour plus de détails, vous pouvez lire ce blog
.OSSpinLock n'est plus sûr
GCD+bloc pour
.