[c++] C++에서의 윈도우 스레드 간 통신과 동기화
소개
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();
}
참고 자료
- C++ Concurrency in Action, Second Edition. Anthony Williams. Manning Publications, 2019.
- C++ Concurrency in Action. Anthony Williams. Manning Publications, 2012.