차이점은를 잠그고 잠금을 해제 할 수 있다는 것 std::unique_lock
입니다. std::lock_guard
건설시 한 번만 잠기고 파괴시 잠금이 해제됩니다.
따라서 유스 케이스 B의 경우 std::unique_lock
조건 변수에 반드시 a가 필요 합니다. A의 경우 가드를 다시 잠글 지 여부에 따라 다릅니다.
std::unique_lock
뮤텍스를 즉시 잠그지 않고 RAII 래퍼를 빌드하도록 구성 할 수있는 다른 기능이 있습니다 ( 여기 참조 ).
std::lock_guard
또한 편리한 RAII 래퍼를 제공하지만 여러 뮤텍스를 안전하게 잠글 수는 없습니다. 제한된 범위에 대한 랩퍼가 필요할 때 사용할 수 있습니다 (예 : 멤버 함수).
class MyClass{
std::mutex my_mutex;
void member_foo() {
std::lock_guard<mutex_type> lock(this->my_mutex);
/*
block of code which needs mutual exclusion (e.g. open the same
file in multiple threads).
*/
//mutex is automatically released when lock goes out of scope
};
기본적으로 chmike으로 질문을 명확히하기 std::lock_guard
와 std::unique_lock
동일합니다. 따라서 위의 경우로 대체 할 수 std::lock_guard
있습니다 std::unique_lock
. 그러나 std::unique_lock
약간 더 많은 오버 헤드가있을 수 있습니다.
요즘에는 std::scoped_lock
대신에 사용해야 합니다 std::lock_guard
.