[c++] C++에서의 스레드 안전한 데이터 구조
C++ 프로그래밍에서 멀티스레딩 환경을 다룰 때 스레드 간의 데이터 무결성을 보장하기 위해 스레드 안전한 데이터 구조를 사용해야 합니다. 이 글에서는 C++에서 스레드 안전한 데이터 구조를 어떻게 구현하는지 알아보겠습니다.
Contents
스레드 안전한 데이터 구조란?
스레드 안전한 데이터 구조는 멀티스레딩 환경에서 여러 스레드가 동시에 데이터에 접근할 때 데이터의 일관성과 무결성을 보장하는 데이터 구조를 말합니다. 이를 통해 경쟁 조건(Race Condition)과 데드락(Deadlock) 등의 문제를 해결할 수 있습니다.
C++에서의 스레드 안전한 데이터 구조 구현
std::mutex를 사용한 스레드 안전한 데이터 구조
#include <mutex>
#include <vector>
std::vector<int> sharedData;
std::mutex mtx;
void addToSharedData(int value) {
std::lock_guard<std::mutex> lock(mtx);
sharedData.push_back(value);
}
위 코드에서 std::mutex
와 std::lock_guard
를 사용하여 sharedData
에 안전하게 접근하고 수정할 수 있습니다.
std::atomic을 사용한 스레드 안전한 데이터 구조
#include <atomic>
std::atomic<int> sharedValue;
void updateSharedValue(int newValue) {
sharedValue.store(newValue, std::memory_order_relaxed);
}
int getSharedValue() {
return sharedValue.load(std::memory_order_relaxed);
}
std::atomic
을 사용하면 원자적(atomic)인 연산을 통해 변수의 값을 안전하게 읽고 쓸 수 있습니다.
결론
C++에서 스레드 안전한 데이터 구조를 구현하는 방법에 대해 간단히 알아보았습니다. std::mutex
와 std::atomic
은 멀티스레딩 환경에서 안전한 데이터 접근을 보장하는 데 유용한 도구입니다. 이러한 도구들을 적절히 활용하여 데이터 구조를 설계하면 스레드 안전성을 확보할 수 있습니다.
참고 문헌:
- https://en.cppreference.com/w/cpp/language/atomic
- https://en.cppreference.com/w/cpp/thread/mutex