2011-03-11 3 views
1

boost::recursive_mutex::scoped_lock에서 unlock()을 호출 한 후 잠금 객체가 뮤텍스를 소멸자에서 어떻게 든 참조할까요?boost :: recursive_mutex :: scoped_locks 소멸자가 잠긴 뮤텍스를 참조합니까?

잠금 장치는 잠금 해제 호출 후에도 여전히 뮤텍스에 대한 참조를 유지합니다 (즉, mutex()이 동일한 포인터를 반환 함). 잠금이 범위를 벗어나기 전에 뮤텍스가 소멸되는 경우 잠금에서 release()을 호출해야합니까?

답변

1

부스트 1.42에서 unique_lock 소멸자에 대한 코드를 보면 : 그것은 잠금을 소유하는 경우

~unique_lock() 
    { 
     if(owns_lock()) 
     { 
      m->unlock(); 
     } 
    } 

그것은 단지 당신의 (현재는 무효) 뮤텍스에의 포인터 역 참조하려고합니다. 이 scoped_lock에 대한 잠금을 이미 호출했다면이 구현에서 문제가 발생해서는 안됩니다 (가능성은 낮지 만 향후 라이브러리 버전에서 변경 될 수 있음).

그러나 종속 개체가 종속되기 전에 종속 개체가 파괴되는 순서로 개체가 파괴되는지 확인하는 것이 좋습니다. 이것을 보장 할 수 없다면, 올바르게 말하면 mutex를 파하기 전에 잠금에 release()를 호출해야합니다.

관련 문제