잠금 없는 프로그래밍을 CPU 차원의 기계명령어를 사용해서 구현한다면, 다른 플랫폼에서의 동작을 보장 할 수 없다.
따라서, 언어 수준에서 제공하는 인터페이스를 사용해야 한다.
C++에서는 atomic 키워드를 통해 이러한 인터페이스를 제공한다.
include <atomic>
std::atomic_thread_fence(std::memory_order_acquire);
std::atomic_thread_fence(std::memory_order_release);
첫 예시에도 이와 같은 방식으로 획득-해제 의미론을 적용 할 수 있다.
std::atomic<bool> is_enemy_coming(false);
int enemy_num = 0;
void king_thread()
{
enemy_num = 100000;
std::atomic_thread_fence(std::memeory_order_release);
is_enemy_coming.store(true, std::memory_order_release);
}
void other_thread()
{
int n;
if(is_enemy_coming.load(std::memory_order_relaxed))
{
std::atomic_thread_fence(std::memory_order_acquire);
n = enemy_num;
}
}