[c++] C++에서 뮤텍스를 사용한 스레드 간 통신
C++에서 멀티스레딩 환경에서 스레드 간 안전한 통신을 위해 뮤텍스(mutex)를 사용할 수 있습니다. 뮤텍스는 여러 스레드가 공유된 자원에 접근할 때 상호배타적인 실행을 보장하는 동기화 기법입니다.
뮤텍스 생성 및 사용
다음은 C++에서 뮤텍스를 생성하고 사용하는 간단한 예제입니다.
#include <iostream>
#include <thread>
#include <mutex>
std::mutex mtx;
void sharedResourceAccess(int id) {
mtx.lock();
std::cout << "Thread " << id << " is accessing the shared resource" << std::endl;
mtx.unlock();
}
int main() {
std::thread t1(sharedResourceAccess, 1);
std::thread t2(sharedResourceAccess, 2);
t1.join();
t2.join();
return 0;
}
위의 예제에서 std::mutex
를 사용하여 뮤텍스를 생성하고, mtx.lock()
및 mtx.unlock()
을 사용하여 뮤텍스를 잠그고 푸는 동작을 수행합니다. 이를 통해 두 개의 스레드가 안전하게 공유 자원에 접근할 수 있습니다.
주의사항
- 뮤텍스는 반드시 잠금 해제가 되어야 합니다. 잠금된 상태에서 프로그램이 종료되면 뮤텍스는 계속 잠긴 채로 남아 다른 스레드가 사용할 수 없게 됩니다.
- 데드락(deadlock)을 방지하기 위해 뮤텍스 잠금은 필요한 최소 시간에만 사용해야 합니다.
- 뮤텍스를 사용할 때는 주의 깊게 동기화를 고려하여야 합니다.
뮤텍스를 사용하여 C++에서 스레드 간 통신을 안전하게 수행할 수 있으며, 이를 통해 병행성을 효과적으로 관리할 수 있습니다.
참고 문헌:
- http://www.cplusplus.com/reference/mutex/mutex/
- https://en.cppreference.com/w/cpp/thread/mutex