[c++] C++에서의 윈도우 스레드 간 통신과 동기화
  1. 소개
  2. 스레드 간 통신
  3. 뮤텍스를 이용한 동기화
  4. 참고 자료

소개

C++는 멀티스레딩 환경에서 프로그래밍할 때 효율적인 도구입니다. 스레드 간 통신과 동기화는 병렬로 실행되는 스레드들 간에 데이터를 안전하게 공유하고 조절하는 데 중요한 역할을 합니다.

스레드 간 통신

C++에서 스레드 간 통신을 위해 큐(queue)나 뮤텍스(mutex) 등을 사용할 수 있습니다. 큐를 사용하면 하나의 스레드에서 다른 스레드로 데이터를 안전하게 전달할 수 있습니다.

#include <queue>
#include <thread>
#include <mutex>
#include <iostream>
#include <condition_variable>

std::queue<int> q;
std::mutex m;
std::condition_variable cv;

void producer() {
    // 데이터 생산
    int data = 42;
    
    std::unique_lock<std::mutex> lock(m);
    q.push(data);
    lock.unlock();
    cv.notify_one();
}

void consumer() {
    std::unique_lock<std::mutex> lock(m);
    cv.wait(lock, []{ return !q.empty(); });
    int data = q.front();
    q.pop();
    lock.unlock();

    // 데이터 소비
    std::cout << "Consumed: " << data << std::endl;
}

뮤텍스를 이용한 동기화

뮤텍스(mutex)를 사용하여 공유 자원에 대한 접근을 동기화할 수 있습니다.

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

std::mutex m;

void sharedResourceAccess() {
    m.lock();
    // 공유 자원에 대한 작업 수행
    m.unlock();
}

참고 자료