몇 가지 일반적으로 사용되는 잠금 아이폰 OS

  1. 스핀 잠금
    NSSpinLock는, 그것이 결함, 폐지되어 사용할 수 없습니다, 그것은 교착 상태의 원인이됩니다. 낮은 우선 순위의 스레드가 잠금을 액세스하고 작업을 실행할 때, 더 높은 우선 순위를 가지고 있기 때문에, 다음 단지 우선 순위가 높은 스레드도 잠금을 방문, 그래서 우선 순위 작업, 그것은 자물쇠에 대한 액세스를 중단되지 않도록 낮은 우선 순위의 스레드의 결과로, 등, 바쁜 잠금을 액세스하는 데 사용되는 CPU의 대부분의 작업을 수행 할 수있는 충분한 CPU 기회가없는 만들고, 이러한 교착 상태의 원인.
  2. 뮤텍스
    이 순서 synthronized p_thread_mutex, NSLock는, @ 또한 우리의 일반적인 여러 뮤텍스 성능의 종류에 따라,하지만.
  3. 재귀 잠금
    NSRecursiveLock, 그것은 우리에게 여러 잠금을 할 수 있습니다 재귀 잠금입니다.
  4. 조건 잠금
    NSCondition을, 우리는 신호 호출 방법은 스레드가 계속하도록 허용 할 수 있습니다 대기 상태로 현재 스레드를 대기 방법, 전화 잠금 상태는, 당신은 또한 방송 방식에 대한 호출 할 수 있습니다.
  5. 세마포어는
    뮤텍스가 또한 사용될 수있다 때 논리 프로그래밍 더 복잡한 시나리오에 적용되는 소정의 범위를 semphone, 또한 높은 스핀 잠금 외에도 성능을 고정하는 것이 생각된다.
- (void)mutexLock{
    //pthread_mutex
    pthread_mutex_t mutex;
    pthread_mutex_init(&mutex,NULL);
    pthread_mutex_lock(&mutex);
    pthread_mutex_unlock(&mutex);

    //NSLock
    NSLock *lock = [[NSLock alloc] init];
    lock.name = @"lock";
    [lock lock];
    [lock unlock];
    
    //synchronized
    @synchronized (self) {
        
    }
}

- (void)RecursiveLock{
    NSRecursiveLock *lock = [NSRecursiveLock alloc];
    [lock lock];
    [lock lock];
    
    [lock unlock];
}

- (void)conditionLock{
    dispatch_async(dispatch_get_global_queue(0, 0), ^{
        condition = [[NSCondition alloc] init];
        [condition wait];
        NSLog(@"finish----");
    });
    
    dispatch_async(dispatch_get_global_queue(0, 0), ^{
        [NSThread sleepForTimeInterval:5.0];
        [condition signal];
    });
}

- (void)semaphore{
    dispatch_semaphore_t semaphore = dispatch_semaphore_create(0);
    dispatch_async(dispatch_get_global_queue(0, 0), ^{
        dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);
        NSLog(@"semaphoreFinish---");
    });
    
    dispatch_async(dispatch_get_global_queue(0, 0), ^{
        [NSThread sleepForTimeInterval:5.0];
        dispatch_semaphore_signal(semaphore);
    });
}
复制代码

HTTPS : //juejin.im/post/5cf6353ce51d45776031afb3 재현

추천

출처blog.csdn.net/weixin_33892359/article/details/91417417