2012-02-21 2 views
3

나는 여러 리더/단일 작가의 뮤텍스를 구현하는 부스트 :: shared_mutex를 사용하는 것을 시도하고있다. 제 질문은 상당히 간단합니다. 다른 스레드가 shared_mutex를 쓰기 위해 잠글려고 할 때 스레드가 shared_mutex에 대한 독자 액세스 권한을 얻을 수 있습니까? 예를 들어, 나는부스트 :: shared_mutex 다중 리더/단일 작가 뮤텍스

  • 스레드 (1)가 그 shared_mutex에 shared_lock을 가지고 있으며, 스레드 2가 shared_mutex에 shared_lock을 가지고 읽으려고
  • 무언가를 읽으려고 10 개 스레드, 쓸 수 있습니다 그 중 하나를 가지고 뭔가
  • 스레드 3은 shared_mutex에 unique_lock을 가지고 있으며, 스레드 4가 shared_mutex에 shared_lock을 가지고 있으며, 무언가를 읽으려고
  • 뭔가를 쓰려고
  • 스레드 (5)는 shared_mutex에 shared_lock을 가지고 있으며, 무언가를 읽으려고
  • shared_mutex 현재 스레드 2에 의해 잠겨 공유

, 내 질문은 스레드 4가 읽기 액세스 권한을 얻을 수있는 가능성이 있는지 여부입니다 해당 shared_mutex 전에 스레드 3 쓸 수 있습니까? 리더/라이터 뮤텍스가 기아 상황에 처해질 수 있습니까 (예 : 100 독자 v.s. 1 명의 작가?

감사합니다.

+0

중복 : http://stackoverflow.com/questions/4203467/multiple-readers-single-writer-locks-in-boost –

+0

및 여기 : http://stackoverflow.com/questions/989795/example-for- boost-shared-mutex-multiple-reads-one-write –

+1

관련이 있지만 중복은 아닙니다. – Thomas

답변

3

은 분명히 boost::shared_mutex는 구현에 공정성 정책까지 둡니다. 그것은 공평하고, 독자 이상의 작가 또는 작가가 넘는 독자 일 수 있으므로 작가의 특정 버전에 따라 작가가 굶주릴 수도 있습니다.

+0

튜더, "리더 오버 라이터"와 "라이터 오버 리더"에 대해 좀 더 자세히 말해 줄 수 있습니까? 감사. – 2607

+0

reader-over-writer는'shared_lock'을하기를 기다리는 독자가'lock'을하기를 기다리는 작가보다 우선 순위가 높음을 의미합니다. writer-over-reader는 반대입니다. – Tudor

+0

"boost :: shared_mutex'가 구현에 대한 공정성 정책을 떠난다면"boost :: shared_lock "(그리고 친구들)은 뮤텍스 구현에 대한 공정성 정책 - boost :: shared_mutex '리더 - 오버 작가 (reader-over-writer) '정책 (AFAIU)을 구현한다. "writer-over-reader"mutex 정책을위한 boost 구현이 있습니까? 아니면 내 구현을 구현해야합니까? – Guss