스레드 A에서 업데이트되고 다른 스레드에서 읽는 메모리 변수가 있습니다. 값이 0이 아닌 경우 독자 만 신경을 씁니다. 일단 값이 증가하면 결코 0으로 되돌아 가지 않습니다. 아래와 같이 최적화하는 것이 합리적입니까? 다른 말로하면, 독자의 입장에서 볼 때, 나는 만족스러운 상태가되면 "울타리"가 필요 없다. 당신이 실제로 응용 프로그램의 성능을 측정 기본 (순차적으로 일관) 아토를 사용하여 시도하지 한 경우C++ 원자 적 순서 효율성
std::atomic<int> counter;
writer:
increment()
{
counter.store(counter+1, std:memory_order_release)
}
reader:
iszero()
{
if (counter.load(std::memory_order_relaxed) > 0) return false;
// memory fence only if condition not yet reached
return (counter.load(std::memory_order_acquire) == 0);
}
카운터가 0으로 돌아갈 수 있습니다. –
reader :: iszero()는 스레드 로컬 부울 값을 가지며 카운터에서 처음으로 0이 아닌 값을 반환합니다. 그것이 사실이라면 즉시 false를 반환하십시오. 그래도 틀린 경우에만 카운터를 확인하십시오. –
독자는 얼마나 자주 전화를 받습니까? 조숙 한 최적화 같아 보인다. –