boost library 에서 mutex 와 recursive_mutex 의 차이점?

zelon의 이미지

mutex 는 하나의 쓰레드에서 같은 mutex object 에 lock 을 걸 때 deadlock 에 걸리고, recursive_mutex 는 안 걸린다고 하는데,

실제로 mutex 로 연속으로 같은 객체에 lock 을 걸어보니, deadlock 상태에 들어가지 않고, 그냥 통과됩니다.

대체 이 둘은 뭐가 다른건가요?

#include <boost/thread/mutex.hpp>
#include <iostream>

using namespace std;

int main()
{
	boost::mutex lockObj;
	boost::mutex::scoped_lock a(lockObj);

// 여기서 deadlock 상태에 들어갈것으로 예상.....
	boost::mutex::scoped_lock b(lockObj);


	std::cout << "end" << endl;
	return 0;
}

blitzerg의 이미지

혹시

   boost::mutex::scoped_lock a(lockObj);

부분이 copy constructor 아닌가요?

해서 lockObj의 내용을 그대로 사용하는게 아니라 카피가 되는 듯한데요.

일반적으로 대부분의 라이브러리는 copy constructor가 일일이 다 구현된 걸로 알고 있습니다만....