[c++] C++에서의 뮤텍스를 사용한 시스템 락 구현
뮤텍스(Mutex)는 C++에서 동시에 여러 스레드가 공유되는 자원에 대한 접근을 제어하는 데 사용됩니다. 뮤텍스를 사용하면 여러 스레드가 동시에 공유 자원을 수정하는 것을 막을 수 있습니다.
뮤텍스란?
뮤텍스는 상호배타적(mutual exclusion) 접근을 제어하기 위해 사용됩니다. 이는 여러 스레드가 동시에 공유 메모리나 리소스에 접근하지 못하도록 하는 동기화 메커니즘입니다.
C++에서의 뮤텍스 사용
C++에서는 <mutex>
헤더를 사용하여 뮤텍스를 다룰 수 있습니다. 뮤텍스를 사용하는 가장 간단한 방법은 std::mutex
클래스를 사용하는 것입니다.
#include <iostream>
#include <thread>
#include <mutex>
std::mutex mtx;
void criticalSection()
{
mtx.lock();
// 공유 자원에 대한 임계 영역
mtx.unlock();
}
int main()
{
std::thread t1(criticalSection);
std::thread t2(criticalSection);
t1.join();
t2.join();
return 0;
}
위의 예제에서 std::mutex mtx;
는 mtx
라는 뮤텍스 객체를 생성합니다. mtx.lock()
과 mtx.unlock()
은 임계 영역에 진입하기 위해 뮤텍스를 lock하고, 임계 영역을 빠져나올 때 unlock하는 역할을 합니다.
물론 C++11 이상에서는 std::lock_guard
나 std::unique_lock
을 사용하여 더 간편하고 안전한 방법으로 뮤텍스를 다룰 수 있습니다.
결론
뮤텍스는 동기화를 통해 스레드 간 공유 자원에 대한 안전한 접근을 가능하게 해줍니다. 이를 통해 시스템의 안정성을 높일 수 있습니다. C++에서는 <mutex>
헤더를 통해 간편하게 뮤텍스를 다룰 수 있으니, 멀티스레드 환경에서 안전한 프로그램을 작성하기 위해 적극 활용해보시기 바랍니다.
참고 문헌:
- https://en.cppreference.com/w/cpp/thread/mutex