recherche

Maison  >  Questions et réponses  >  le corps du texte

ios - OC中的方法加锁

高洛峰高洛峰2889 Il y a quelques jours369

répondre à tous(2)je répondrai

  • 怪我咯

    怪我咯2017-04-18 09:24:15

    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

    .

    répondre
    0
  • ringa_lee

    ringa_lee2017-04-18 09:24:15

    GCD+bloc pour

    .

    répondre
    0
  • Annulerrépondre