cari

Rumah  >  Soal Jawab  >  teks badan

ios - OC中的方法加锁

高洛峰高洛峰2889 hari yang lalu370

membalas semua(2)saya akan balas

  • 怪我咯

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

    Kawalan peringkat kaedah tidak mempunyai pengubah suai peringkat bahasa dan blok kod boleh dikunci.

    Terdapat banyak cara untuk mengunci.

    1. @disegerakkan

    2. NSLock

    3. pthread_mutex

    4. dispatch_semaphore

    5. OSSpinLock

    1. @disegerakkan

    @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

    Memandangkan kunci putaran tidak lagi selamat dalam iOS, ia tidak akan diperkenalkan di sini untuk butirannya, anda boleh membaca blog ini
    OSSpinLock tidak lagi selamat

    .

    balas
    0
  • ringa_lee

    ringa_lee2017-04-18 09:24:15

    GCD+block untuk

    .

    balas
    0
  • Batalbalas