CPU에 따라서 int64같은 데이터에 대해 atomic한 연산을 지원해줄 수도 있고, 안해줄 수도 있다.
만약 안해주는 CPU의 경우, C++ 등에서 atomic한 연산으로 int64 데이터에 연산을 실행하면, 컴파일러가 별도로 락을 만들고 락을 걸어 원자성을 보장해주는 형태로 구현된다. (당연히 더 느리다)
특정 상황에서 어떤 연산의 atomic 연산이 CPU단에서 락없이 처리가 가능한지를 확인하려면 다음과 같이 확인해보면 된다.
atomic<int64> v;
cout << v.is_lock_free() << endl;
값이 1일 경우 락 없이도 처리가 가능
0일 경우 락(mutex)을 생성해 처리해주는 중이라는 뜻이다.
'os > multithreading, parallel computing' 카테고리의 다른 글
메모리 정책(memory order), 메모리 장벽(memory fence/barrier) (0) | 2022.09.10 |
---|---|
멀티스레드 환경에서 발생하는 문제들 (0) | 2022.09.10 |
스레드의 race condition (0) | 2021.05.26 |
쓰레드와 프로세스, CPU 병렬 처리와 동시 처리 (0) | 2021.01.03 |