ios - OC中的方法加锁
高洛峰
高洛峰 2017-04-18 09:22:15
0
2
363
高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

répondre à tous(2)
刘奇

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.

  1. @synchronisé

  2. NSLock

  3. pthread_mutex

  4. dispatch_semaphore

  5. OSSpinLock

1. @synchronisé

@interface A : NSObject {
    NSObject _lock;
}

- (void)func {
    @synchronized(_lock) {
    // do something
    }
}

2.NSLock

- (void) func {
    [_lock lock];
    // do something
    [_lock unlock];
}

3. pthread_mutex

@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);
}

4. dispatch_semaphore


@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);
}

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

.

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal