counter++ 경쟁 조건
결과가 실행마다 달라지면 공유 상태 보호가 필요합니다.
std::mutex, lock(), unlock(), std::lock_guard, std::unique_lock은 잠금과 해제의 책임을 다르게 표현합니다.
결과가 실행마다 달라지면 공유 상태 보호가 필요합니다.
직접 unlock을 놓치면 데드락으로 이어질 수 있습니다.
짧은 임계 영역에는 가장 단순한 RAII 선택입니다.
기능이 많은 만큼 잠금 상태를 더 주의해서 읽어야 합니다.