하나의 원자 변수와 std::memory_order_seq_cst
을 사용하는 경우 비 원자 연산이 재정렬되지 않도록 보장됩니까? 내가 std::memory_order_seq_cst
를 사용할 때memory_order_seq_cst는 비 원자 연산과 어떻게 동기화됩니까?
std::atomic<bool> quux = {false};
void foo() {
bar();
quux.store(true, std::memory_order_seq_cst);
moo();
}
이
store
의 호출 후에 순서가 묻지 않도록 보장
bar()
인 경우 예를 들어
, 및 moo()
은, 한, store
의 호출하기 전에 순서가 얻을하지 적어도 다른 스레드의 관점에서?
또는 코드에 넣으려면 다른 스레드에서 실행하는 경우 다음 가정이 유효합니까? 나는 가정
if(quux.load(std::memory_order_seq_cst) == true) {
// bar guaranteed to be called; its side-effects are visible
// moo might have been called, but is not guaranteed to
} else {
// bar might have been called, but is not guaranteed to
// moo might have been called, but is not guaranteed to
}
참고 bar
도 moo
도 사용 작업, 뮤텍스, 잠금, 울타리 또는 다른 동기화 기능을 원자.
Nitpicking, 그러나 : cppreference.com은 훌륭하지만 ISO 표준은 아닙니다. – Zeta
@Zeta 맞습니다. 나는 그것이 표준의 사본이 아니기 때문에 cppreference.com이 아주 정확하다는 것을 알았지 만 생략이있을 수있다. –