suchen

Heim  >  Fragen und Antworten  >  Hauptteil

ios - OC中的方法加锁

高洛峰高洛峰2889 Tage vor372

Antworte allen(2)Ich werde antworten

  • 怪我咯

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

    方法级别的控制没有语言级别的修饰符,可以将代码块加锁。

    加锁的方法很多。

    1. @synchronized

    2. NSLock

    3. pthread_mutex

    4. dispatch_semaphore

    5. OSSpinLock

    1. @synchronized

    @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

    由于自旋锁在iOS中不再安全,这边也不介绍了,具体可以看这篇博客
    不再安全的 OSSpinLock

    Antwort
    0
  • ringa_lee

    ringa_lee2017-04-18 09:24:15

    用GCD+block。

    Antwort
    0
  • StornierenAntwort