안녕하세요,
재재입니다.

이번에는 c++ mutex 제어하기 위해 많이 사용하는,
c++ unique_lock 과 lock_guard 차이에 대해서 다루어볼게요!

(1) c++ unique_lock 이란?

c++ unique_lock 은 mutex 제어를 위해 사용하는 것 중 하나입니다.

unique_lock 을 사용하면 mutex 에 대한 lock 을 획득 할 수 있으며,
중간에 lock 을 해제할 수 있습니다. 다만, unique lock 은 역할이 끝나면 자동으로 해제되며,
lock -> unlock -> lock -> unlock 와 같이 반복해서 사용이 가능합니다.

특히, c++ unique_lock 은 RAII 원칙을 따릅니다.

https://en.cppreference.com/w/cpp/thread/unique_lock
https://en.cppreference.com/w/cpp/thread/lock_guard

(2) c++ lock_guard 란?

c++ unique_lock 과 같이 lock_guard 도 mutex 제어에 사용됩니다.

c++ lock_guard 는 임의로 lock 을 해제 할 수 없으며,
해당 연산 (스코프) 가 끝나면 자동으로 해제됩니다.
unique_lock 과 달리 예외가 발생하면 자동으로 lock 을 해제해서,
deadlock 과 같은 문제가 발생하지 않는 장점이 있습니다.

(3) c++ unique_lock vs lock_guard

표로 한번 정리해봤습니다.

std::unique_lockstd::lock_guard
소유권 (ownership)lock 을 다시 획득하는 게 가능함.한번 lock 을 잃으면 다시 획득 할 수 없음.
해제자동으로 해제되기도 하나, 필요시 중간에 해제가 가능함.자동으로 해제됨.
예외처리세부적으로 제어가 필요 할 수 있으며,
deadlock 이 발생 할 수 있음.
자동으로 처리가 되며,
deadlock 이 발생하지 않음.
사용 가능 mutexstd::mutex, std::shared_mutex, std::recursive_mutex, …std::mutex

(4) 결론

std::unique_lock 과 std::lock_guard 는 각 용도에 맞게 사용되어야 합니다.
조금 더 세밀하게 제어하면서 사용 할 수 있다면 unique_lock 을 추천 드리며,
그렇지 않은 경우에는 lock_guard 를 통해 mutex 제어에 입문해보시는 것은 어떨가요?

c++ unique_lock 과 lock_guard 차이
태그:                         

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다