[c++] C++에서의 뮤텍스와 조건 변수 (Condition variable) 사용
C++에서 뮤텍스와 조건 변수는 병행 프로그래밍을 구현하는 데 중요한 개념입니다. 이 두 요소를 사용하면 스레드 간의 안전한 데이터 공유와 동기화를 쉽게 구현할 수 있습니다.
뮤텍스 (Mutex)
뮤텍스는 상호 배제를 위해 사용됩니다. 하나의 스레드만이 특정 코드 블록 또는 리소스에 접근할 수 있도록 합니다. C++에서는 <mutex>
헤더를 사용하여 뮤텍스를 제공합니다.
#include <mutex>
std::mutex mtx;
void someFunction() {
std::lock_guard<std::mutex> lock(mtx);
// 임계 구역 (Critical section)
// ...
}
std::lock_guard
는 뮤텍스를 손쉽게 사용할 수 있도록 해주는 유틸리티 클래스입니다. 이를 사용하여 뮤텍스 블록을 만들고 특정 코드 영역을 보호할 수 있습니다.
조건 변수 (Condition variable)
조건 변수는 스레드 간의 통신을 위해 사용됩니다. 특정 조건이 충족될 때까지 스레드를 대기 상태로 전환하고, 조건이 발생하면 대기 중인 스레드를 깨우는 데 사용됩니다. C++에서는 <condition_variable>
헤더를 사용하여 조건 변수를 제공합니다.
#include <condition_variable>
std::condition_variable cv;
void someFunction() {
std::unique_lock<std::mutex> lock(mtx);
while (!condition) {
cv.wait(lock);
}
// 조건이 충족되었을 때 수행하는 작업
// ...
cv.notify_one(); // 대기 중인 스레드 깨우기
}
std::unique_lock
은 뮤텍스와 조건 변수를 함께 사용할 때 편리하게 사용할 수 있는 래퍼 클래스입니다. 조건이 충족되기 전까지 cv.wait
메서드를 사용하여 스레드를 대기 상태로 전환하고, 조건이 충족되면 cv.notify_one
을 사용하여 대기 중인 스레드를 깨울 수 있습니다.
요약
C++에서의 뮤텍스와 조건 변수는 병행 프로그래밍을 위해 중요한 도구입니다. 뮤텍스는 상호 배제를, 조건 변수는 스레드 간의 통신을 가능하게 합니다. 이러한 도구들을 사용하여 안전한 병행 프로그래밍을 구현할 수 있습니다.
참고 자료: