2016-10-06 3 views
0

교착 상태를 피하기 위해 계층 잠금 시스템을 구축하려고합니다. 의미는 코드를 레이어 (또는 레벨)로 나누고 각 레벨에서 다음 레벨의 잠금 만 허용합니다. 동일한 레벨 내에서 사전 정의 된 순서로 잠 가야합니다. 이렇게하면 대부분의 교착 상태가 방지됩니다. 이와 비슷한 것 http://www.drdobbs.com/parallel/use-lock-hierarchies-to-avoid-deadlock/204801163?pgno=1RW 잠금 (계층 잠금 포함)

뮤텍스의 경우이 기능은 매력처럼 작동하지만 읽기 쓰기 잠금의 경우 실패합니다. 예를 들어, 읽기 잠금을 취한 다음 쓰기 잠금으로 설정하려는 경우이 알고리즘으로 금지 된 동일한 레벨에서 새 잠금을 가져 가고 있음을 의미합니다.

RW 및 뮤텍스 잠금에 대해 알고리즘이 어떻게 변경 되나요? 고려해야 할 다른 알고리즘이 있습니까?

PS : 나는 C를 프로그래밍을하고 ++하지만 문제는 이론적 하나 실제로 rellevant입니다 또한

+0

읽기 쓰기 잠금이란 무엇을 의미합니까? – Jackson

+0

자급자가 질문을 편집 할 수 있습니까? 링크가 끊어지면 더 이상 이해할 수없는 질문이 남습니다. 또한 한 번에 읽을 수있을 때 질문 질을 높이게됩니다. – MicroVirus

+0

하지만 계층 적 잠금은 알려진 알고리즘이므로 아무 문제가 없어야합니다. – Epic

답변

0

쓰기 잠금 만 보유해야하면서 것은 A의 읽기 잠금이 1 개 이상의 스레드가 유지 될 수 있음을 감안할 때 1 스레드 및 어떤 읽기 잠금 (읽기 및 쓰기 잠금에 대한 내 기본 이해) 다음 부여 할 수 없다면 다음이 작업을 수행 할 수 없습니다.

스레드 1과 2에 읽기 잠금이있는 경우 어떻게 그 중 하나가 읽기 잠금을 쓰기 잠금으로 변환 할 수 있습니까? 이것을 허가하면 (자), 1 개의 thread가 독해 락을 가지고, 한편이 독해 락을가집니다. 당신이해야 할 일은 그 레벨에서 읽기 잠금과 다른 모든 잠금을 해제 한 다음 쓰기 잠금을 포함하는 새로운 잠금 세트를 꺼내는 것입니다. 위 시나리오에서 쓰기 잠금 스레드는 다른 스레드가 읽기 잠금을 해제 할 때까지 차단됩니다.

그러나 읽기 잠금을 단일 스레드에서만 유지할 수 있다면 쓰기 잠금과 어떻게 다른가요? 자물쇠가 있다면 잠긴 생각에 단독으로 액세스 할 수 있습니다.

+0

스레드 A가 레벨 2에서 읽기 잠금과 뮤텍스 잠금을 취한 다음 읽기 잠금을 해제하면 받아 들일 수 없습니다. 기입 락 잠금은 각 레벨에서 일관된 순서로 이루어져야하기 때문에 – Epic

+0

@Epic이 경우에는이 레벨에서 기존 잠금을 ​​해제 한 다음 읽기 잠금 대신 쓰기 잠금을 사용하여 다시 획득하는 것만으로 충분하다고 생각합니다. . – Jackson