728x90 Atomic2 메모리 모델 c++ 11에서 메모리 모델에 대한 내용이 확립되었다 c++11 어떤환경에서건 우리가 의도한 대로 동작한다고 볼 수 있다 쓰레드에 대한 내용을 다루면서 여러 쓰레드가 동일한 메모리에 동시에 접근할때 문제가 되는 상황이라고 볼 수 있다. 동시에 접근하는 자체가 문제는 아닌데(read 하는경우), 값을 쓸경우(write)에 문제가 슬슬 발생함. 우리는 이런 경우를 Race Condition(경합 조건) 이 일어난다고 표현한다. 코드의 결과물이 예측을 할 수가 없게됨.(Undefined Behavior) 그래서 우리는 결국 공용 데이터에 접근하게 된다면 Lock(mutex)을 이용한 상호 배타적 접근(Mutual Exclusive), 혹은 Atomic(원자적) 연산을 이용한다. 이중 원자적 연산에 대해 조금.. 2024. 5. 2. Atomic #include #include int32 sum = 0; void Add() { for (int i = 0; i < 100'0000; ++i) ++sum; } void Sub() { for (int i = 0; i < 100'0000; ++i) --sum; } int main() { Add(); Sub(); return 0; } 이상황에서 Sum 은 당연한 결과지만 0이 될 것이다. 하지만 멀티쓰레드 환경에서 돌린다면 어떻게 될까? #include #include int32 sum = 0; void Add() { for (int i = 0; i < 100'0000; ++i) ++sum; } void Sub() { for (int i = 0; i < 100'0000; ++i) --sum; } int ma.. 2024. 3. 3. 이전 1 다음 728x90