[c++] 뮤텍스를 사용한 동기화 예제
뮤텍스는 여러 스레드가 공유 자원에 접근하는 것을 제어하기 위한 동기화 메커니즘입니다. 다음은 C++에서 뮤텍스를 사용하여 스레드 간에 안전하게 데이터를 공유하는 간단한 예제입니다.
뮤텍스 생성
#include <iostream>
#include <thread>
#include <mutex>
std::mutex m; // 뮤텍스 객체 생성
int shared_data = 0;
void increment_shared_data() {
m.lock(); // 뮤텍스 락
shared_data++;
m.unlock(); // 뮤텍스 언락
}
int main() {
std::thread t1(increment_shared_data);
std::thread t2(increment_shared_data);
t1.join();
t2.join();
std::cout << "공유 데이터: " << shared_data << std::endl;
return 0;
}
설명
std::mutex
를 사용하여 뮤텍스 객체를 생성합니다.increment_shared_data
함수에서 뮤텍스를 이용해 공유 데이터에 안전하게 접근합니다.t1
과t2
스레드에서increment_shared_data
함수가 실행되어 공유 데이터를 증가시킵니다.- 각 스레드는
m.lock()
을 호출하여 뮤텍스를 락하고, 작업을 마치면m.unlock()
을 호출하여 뮤텍스를 언락합니다. - 마지막으로,
shared_data
의 최종 값을 출력합니다.
뮤텍스를 사용하여 공유 자원에 안전하게 접근하여 스레드 간 동기화를 보장할 수 있습니다.
참고 자료
- C++ Reference (https://en.cppreference.com/w/cpp/thread/mutex)