[c++] 뮤텍스를 사용한 자원 공유 방법

C++에서 멀티스레드 환경에서 안전하게 자원을 공유하려면 뮤텍스(mutex)를 사용해야 합니다.

뮤텍스란?

뮤텍스는 “상호배제(mutual exclusion)”를 위한 동기화 기법 중 하나로, 동시에 여러 스레드가 공유 자원에 접근하는 것을 제어하는 데 사용됩니다.

뮤텍스는 다음과 같이 정의됩니다.

#include <mutex>
std::mutex mtx;

뮤텍스를 사용한 자원 공유 방법

다음은 간단한 예제를 통해 C++에서 뮤텍스를 사용하여 자원을 공유하는 방법을 보여줍니다.

#include <iostream>
#include <thread>
#include <mutex>

std::mutex mtx;
int sharedData = 0;

void sharedResourceFunction(int id) {
    mtx.lock(); // 뮤텍스 락 획득
    // 임계 영역 - 공유 자원에 대한 작업 수행
    std::cout << "Thread " << id << " is accessing the shared resource" << std::endl;
    sharedData++;
    mtx.unlock(); // 뮤텍스 락 해제
}

int main() {
    std::thread t1(sharedResourceFunction, 1);
    std::thread t2(sharedResourceFunction, 2);
    
    t1.join();
    t2.join();
    
    std::cout << "Final value of shared data: " << sharedData << std::endl;
    
    return 0;
}

위 예제에서 std::mutex를 사용하여 mtx 뮤텍스를 정의하고, lockunlock을 사용하여 임계 영역을 설정하여 공유 자원에 대한 안전한 액세스를 보장합니다. 이를 통해 두 개의 스레드가 sharedData를 안전하게 증가시킬 수 있습니다.

안전한 멀티스레드 프로그래밍을 위해 뮤텍스 외에도 스핀락, 세마포어 등의 동기화 기법을 알아두는 것이 중요합니다.

뮤텍스는 C++11부터 표준 라이브러리에 포함되어 있으며, C++11 이상의 표준을 사용하는 환경에서는 표준 라이브러리를 사용하여 뮤텍스를 쉽게 활용할 수 있습니다.

참고 자료

이렇게 C++에서 뮤텍스를 사용한 자원 공유 방법을 구현할 수 있습니다.