2017-02-15 1 views
1

이 스레드 문제에 대한 멍청한 데요 : \C 멀티 스레드 : 모든 스레드가 동시에 액세스 할 수있는 경우 읽기 잠금 (pthread_rwlock_rdlock)의 장점은 무엇입니까?

쓰기 잠금이 글로벌 변수 확인을 기다리는 while처럼 동작한다고 상상해보십시오. 좋아요 :

/* pthread_rwlock_wrlock */ 

    while (is_blocked) { 
     /* waiting */ 
    } 
    is_blocked = true; 

    (writing code...) 

/* pthread_rwlock_unlock */ 
    is_blocked = false; 

맞나요? 그리고 어떻게 읽기 잠금이 작동합니까? 공유되는 경우 왜 사용합니까?

정보 :

pthread_rwlock_rdlock() - 공유 읽기 잠금

pthread_rwlock_wrlock를 얻을 수() - 당신이 그것을 원하지 않는 보호 된 리소스를 읽을 때 독점 쓰기 잠금

+1

개념적으로는 비슷할 수 있습니다. 그러나 실제로는 유용한 대기를 수행 할 수있는 CPU주기의 막대한 낭비이기 때문에 바쁜 대기 루프가되지 않습니다. 대기중인 스레드는 잠금이 풀릴 때까지 실행되도록 예약되지 않으며 그 중 하나는 일부 전략에 의해 선택됩니다. – StoryTeller

답변

2

를 얻을 수 읽는 동안 바꿀 수 있습니다.

읽기 잠금 블록 쓰기 잠금!

즉, 읽기 잠금을 사용하는 동안 쓰기 잠금을 얻으려는 사람은 귀하와 다른 사람이 읽기 잠금을 가질 때까지 기다려야합니다. 읽기가 자원을 변경하지 않기 때문에 여러 독자가 동시에 읽을 수 있습니다.

이 컨텍스트에서 읽기 작업의 정의는 보호 된 리소스의 상태를 변경하지 않는 작업입니다. 따라서 읽기/쓰기 잠금의 경우 보호 된 리소스가 (stdin 또는 소켓과 같은) 스트림 인 경우 해당 리소스를 읽으면 상태가 변경되고 쓰기 잠금이 필요합니다.

3

읽기 잠금의 목적은 작성자를 차단하는 것입니다. 더 쓰기 잠금이 이없는 경우

  • 독자는 잠금을 얻을 수 있습니다.
  • 작가이 전혀없는 경우 잠금을받을 수 있습니다..

어느 사소한 구현이, 당신이
예를 들어 제시 한 경주 조건, 이 때로는 실패합니다.