[c++] 비동기식 작업에 뮤텍스 적용하기
C++에서 비동기식 작업을 수행하는 동안 여러 스레드에서 공유 자원에 접근하는 경우, 뮤텍스(mutex)를 사용하여 스레드 간에 동기화를 유지할 수 있습니다.
뮤텍스란 무엇인가?
뮤텍스는 한 번에 한 스레드만 공유 자원에 접근하도록 하는 도구입니다. 한 스레드가 뮤텍스를 획득(acquire)하면, 다른 스레드는 해당 뮤텍스를 사용할 수 없습니다. 이를 통해 공유 자원에 대한 안전한 접근을 보장할 수 있습니다.
비동기식 작업에 뮤텍스 적용하기
아래는 C++에서 std::mutex
를 사용하여 비동기식 작업에 뮤텍스를 적용하는 예시 코드입니다.
#include <iostream>
#include <thread>
#include <mutex>
std::mutex mtx;
void sharedResourceFunction(int id) {
mtx.lock(); // 뮤텍스 획득
std::cout << "Thread " << id << " is accessing the shared resource" << std::endl;
mtx.unlock(); // 뮤텍스 반환
}
int main() {
std::thread t1(sharedResourceFunction, 1);
std::thread t2(sharedResourceFunction, 2);
t1.join();
t2.join();
return 0;
}
위 코드에서 std::mutex
를 사용하여 sharedResourceFunction
에서 공유 자원에 접근할 때 뮤텍스를 획득하고 반환합니다.
마무리
뮤텍스를 사용하여 C++에서 비동기식 작업을 수행하는 동안 공유 자원에 안전하게 접근할 수 있습니다. 하지만 뮤텍스를 적절히 사용하지 않으면 데드락(deadlock)과 같은 문제가 발생할 수 있으므로 주의가 필요합니다.
참고 문헌: C++ Reference - Mutex
위 주의사항을 지키면서 뮤텍스를 적절히 활용하여 안정성이 높고 효율적인 멀티스레드 프로그래밍을 할 수 있습니다.