[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 레퍼런스를 참고하세요.