[c++] std::atomic
C++ 프로그래밍에서 멀티스레딩 환경에서 여러 스레드가 동시에 데이터에 접근하면 데이터 손상이 발생할 수 있습니다. 이러한 문제를 해결하기 위해 C++11부터 std::atomic 템플릿 클래스가 도입되었습니다. std::atomic은 원자적 연산(atomic operation)을 지원하여 여러 스레드 간의 데이터를 동기화하는 데 사용됩니다.
std::atomic의 기본 사용법
다음은 std::atomic의 기본적인 사용법입니다.
#include <atomic>
std::atomic<int> atomicInt(0); // int형 atomic 변수 생성 및 초기화
void threadFunction()
{
atomicInt.store(42); // 값을 저장
int value = atomicInt.load(); // 값을 읽기
}
주요 멤버 함수
std::atomic 클래스는 여러 가지 주요 멤버 함수를 가지고 있습니다.
- store: 값을 저장합니다.
- load: 값을 읽어옵니다.
- exchange: 값을 새로운 값으로 교환합니다.
- compare_exchange_weak 및 compare_exchange_strong: 비교 후 교환하여 원자적으로 작업을 수행합니다.
주의할 점
std::atomic을 사용할 때 주의해야 할 점이 있습니다. std::atomic을 사용하여 동일한 변수에 동시에 접근하는 경우, 경쟁 조건과 그에 따른 동기화 오버헤드를 고려해야 합니다. 또한, 오버헤드를 줄이기 위해 최소한으로 사용하는 것이 좋습니다.
std::atomic은 특정 플랫폼에서 지원되지 않을 수 있으므로, 해당 플랫폼에서의 지원 여부를 확인해야 합니다.
C++ 프로그래밍에서 멀티스레딩 환경에서 안전하고 효율적으로 데이터를 동기화하기 위한 std::atomic 클래스는 중요한 도구입니다.
참조: cppreference.com - std::atomic