[c++] C++에서의 스레드 간 뮤텍스 및 세마포어 활용 방법

스레드 간 동시에 공유 자원을 안전하게 접근하기 위해서는 뮤텍스(mutex)와 세마포어(semaphore)와 같은 동기화 메커니즘이 사용됩니다.

뮤텍스(Mutex) 활용

뮤텍스는 스레드 간 공유 자원에 대한 접근을 제한하는 데 사용됩니다. 아래는 C++에서 뮤텍스를 활용한 간단한 예제 코드입니다.

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

std::mutex mtx;

void sharedResourceAccess() {
    mtx.lock();
    // 공유 자원 접근 및 처리
    mtx.unlock();
}

int main() {
    std::thread t1(sharedResourceAccess);
    std::thread t2(sharedResourceAccess);

    t1.join();
    t2.join();

    return 0;
}

위 코드는 C++의 스레드와 뮤텍스를 사용하여 공유 자원에 대한 안전한 접근을 보장합니다. std::mutex를 생성하고 lock()unlock() 메소드를 사용하여 데이터에 대한 동시 접근을 제어합니다.

세마포어(Semaphore) 활용

세마포어는 공유 자원 또는 특정 리소스에 대한 접근을 제한하는 데 사용됩니다. 아래는 C++에서 세마포어를 활용한 간단한 예제 코드입니다.

#include <iostream>
#include <thread>
#include <semaphore>

std::binary_semaphore semaphore(1); // 이진 세마포어

void sharedResourceAccess() {
    semaphore.acquire();
    // 공유 자원 접근 및 처리
    semaphore.release();
}

int main() {
    std::thread t1(sharedResourceAccess);
    std::thread t2(sharedResourceAccess);

    t1.join();
    t2.join();

    return 0;
}

위 코드는 C++에서 세마포어를 사용하여 공유 자원에 대한 동시 접근을 제어합니다. std::binary_semaphore를 생성하고 acquire()release() 메소드를 사용하여 스레드 간의 동기화를 달성합니다.

뮤텍스와 세마포어는 스레드 간 안전한 동시 접근 및 처리를 보장하는 데 있어 중요한 역할을 합니다.

더 자세한 내용은 C++ concurrency 레퍼런스를 참고하세요.