두 개의 boost :: scoped_locks를 동시에 보유하면 어떤 문제가 있는지 알고 싶습니다. 잠금은 다른 뮤텍스를 잠그고 있습니다. 다음 예제를 고려하십시오.동시에 두 개의 뮤텍스 잠금 유지
void foo1()
{
boost::recursive_mutex::scoped_lock lock(mutex1);
foo2();
}
void foo2()
{
boost::recursive_mutex::scoped_lock lock(mutex2);
}
이것이 교착 상태가 발생하지 않아야 함을 알고 있습니다. 그러나 다른 문제가 있습니까? 어쩌면 스레드가 너무 오랫동안 잠자기가 될 수 있습니까?
답변 해 주셔서 감사합니다. :) –
계속하려면 잠금 순서를 보장하는 한 가지 방법은 뮤텍스/잠금 주위에 경량 래퍼를 놓은 다음 레이어 i의 생성자에 레이어 (i-1)의 고정 된 참조를 가져 오는 것입니다. 그런 다음 다른 방법으로는 만들 수 없습니다. 또는 C++ 17을 사용하고 동시에 잠금을 해제하십시오. – lorro
@lorro 문제를 해결할 수있는 방법이 여러 가지 있음을 잘 알고 있습니다. 그러나 문제 구현이 현명하게 해결되는 방법에 대한 조언을 제공하는 것이 아니라 잠재 문제가 무엇인지 지적하고 문제를 피하는 일반적인 규칙을 지적하기 위해 노력했습니다. 구현은 독자를위한 운동으로 남았습니다. :-) –