2011-05-04 4 views
2

교착 상태를 피하기 위해 잠금 계층 구조를 사용한다고 가정합니다. 리더기 뮤텍스를 사용한다면 어떻게 생각하고 사용해야합니까? 각각의 리더 - 라이터 뮤텍스에 대해 고유 한 읽기 잠금과 쓰기 잠금이 계층 구조에 존재합니까? (그렇다면이 두 잠금이 계층 구조에서 다른 레벨로 지정 될 수 있음을 의미합니다.) 리더기 쓰기 뮤텍스를 사용하면 계층 구조에 교착 상태가 발생할 수 있습니까? (만약 그렇다면 어떻게 피할 수 있습니까?) "업그레이드 가능한"잠금 장치 (뮤텍스 잠금을 해제하지 않고 기록기 잠금으로 전환 할 수있는 판독기 잠금)은 어떻게됩니까?계층 구조 및 판독기 기록기 뮤텍스 잠금

예, 필자는 가능한 경우 (특히 리더기 작성자) 뮤텍스를 피하기위한 조언을 보았습니다. 이것은 일반적으로 사용할지 여부가 아닙니다. 독자 - 작가 뮤텍스가 가장 잘 해결 한 문제가 있다고 가정합니다. 마찬가지로 일반적으로 잠금 계층을 선호하기 때문에 잠금 계층에 대한 대안을 제안하지 마십시오. (만약 리더와 뮤텍스를 락 계층으로 조합한다면 교착 상태가 발생할 가능성이있다.)

나는 멀티 쓰레드 프로그램에 대해 생각하고있다. 부스트 스레드 라이브러리 reader-writer 뮤텍스 클래스는 shared_mutex라고 불린다. unique_lock은 독점 (작성자) 잠금입니다. shared_lock은 공유 (판독기) 잠금입니다. upgrade_lock은 일시적으로 writer lock으로 업그레이드 될 수있는 reader lock입니다.

답변

1

잠금 주문시 단일 잠금으로 취급해야합니다. 대기, 읽기 (B)

  • 잠금 쓰기 (B) 대기,

    1. 잠금 A : 당신은하고 RW 잠금 B를 고정하고, 이렇게 두 개의 스레드를 가지고있는 경우

      여전히 교착 상태입니다.

  • +0

    아, 알겠습니다. 그러나, 나는 그것이 충분하지 않다고 생각한다. 그들 모두가 이것을한다고 가정하자 :'read-lock B, write-lock으로 업그레이드를 기다리는 것'. 따라서 적어도 업그레이드 잠금을 사용할 때는 교착 상태를 피하기 위해 더 많은 것을 고려해야합니다. 나에게 생긴 또 다른 생각은 mutex를 읽기 잠금으로 설정하면 다른 독자들도 여전히 잠금을 설정할 수 있다는 것입니다. 따라서 주문 요구 사항이 적 으면 독자에게 적용될 수 있다고 생각합니다. – ecm

    +0

    나는 업그레이드 가능 잠금을 사용하지 않았으며 사용자가 지정한 이유 때문에 교착 상태가 발생하지 않는 한 전혀 사용법을 볼 수 없습니다 (한 번에 하나의 스레드 만 업그레이드를 확인하지 않는 한). 독자의 경우, 많은 RW 잠금 장치가 대기열에 W 대기자가있는 경우 (굶주린 작성자를 피하기 위해) 독자가 통과 할 수 없도록 유의하십시오. 따라서 잠금 장치가 현재 R 모드에서만 유지되는 경우에도 독자가 잠금을 사용할 수있는 것에 의존하지 못할 수도 있습니다. –