0
(뮤텍스, 기간) :mutex.timed_lock (기간)의 차이와 부스트 : timed_mutex :: scoped_lock scoped_lock 나는 사이의 차이 인 알고 싶습니다
boost::timed_mutex _mutex;
if(_mutex.timed_lock(boost::get_system_time() + boost::posix_time::milliseconds(10))){
exclusive code
_mutex.unlock();
}
및
boost::timed_mutex _mutex;
boost::timed_mutex::scoped_lock scoped_lock(_mutex, boost::get_system_time() + boost::posix_time::milliseconds(10));
if(scoped_lock.owns_lock()) {
exclusive code
}
가
scoped_lock은 unlock 할 호출을 불필요하게 만든다.
- 왜 첫 번째 경우에 우리는 뮤텍스의 멤버 함수로 timed_lock를 호출하고 두 번째에 우리가 뮤텍스의 잠금과 기간을 구성 : 내 질문에 의미합니다.
- 어느 것이 더 효율적입니까?
- boost :: posix_time의 사용법은 정상이며 다른 종류 인 을 사용하는 것이 좋습니다. 크로노 또는 듀레이션?
- 위의 두 가지 방법보다 'x'시간 동안 잠금을 얻으려고하면 더 빠른 방법이 더 빠릅니까?
scoped_lock은 shared_ptr이 원시 포인터와 같은 timed_mutex를 사용합니다. 범위를 벗어나면 mutex 잠금이 해제됩니다. 단순한 timed_mutex (아마도 매우 얇지 만 별도의 관리 레이어를 추가하는 것)보다 많은 오버 헤드가있을 수 있지만 몇 가지 이점이 있습니다. 독점 코드에 예외가있는 것처럼 뮤텍스는 잠금 해제됩니다. 이것은 timed_mutex에서만 발생합니다. – andrjas
불량한 답변은 아니지만 불필요한 잠금 해제에 대해 이미 알고 있다고 말했기 때문에 간신히 네 가지 질문 중 하나에 대답합니다. 잠금 해제를 처리하는 경우 오버 헤드가 조금 더 필요합니다. 나는 의미심장하려고 노력하지 않고있다. 그러나이 대답은 나를 위해 물건을 깨끗하게하지 않는다. 어쨌든 고마워 :) –