C++에서 메모리 장벽이 어떻게 작동하는지 알고 싶습니다. 예를 들어 , 그 경우 표준 : 원자 사용하고 :std :: atomic 메모리 장벽 이해
#include <iostream>
#include <atomic>
int main()
{
std::atomic<int> a;
int n = load();//returns 1 or other value written by other thread
a.store (n, std::memory_order_release);
}
코드 아래의 것과 동일한 의미하는 상기 코드는?
#include <iostream>
#include <atomic>
int main()
{
std::atomic<int> a;
int n = load();
std::atomic_thread_fence(std::memory_order_release);
n = 100;//assume assignment is atomic
}
내가 맞다면, 내가 행동이 인수로 메모리 장벽을 수용 할 수있는 모든 C++ 기능 같다는 것을 확신 할 수 있습니까?
주 함수의 두 번째 줄'int n = a.load (std :: memory_order_acquire) '과 두 번째 예제의 네 번째 줄'a = 100'을 의미합니까? – Oliv
아니요,로드 함수는 std :: atomic load 함수가 아닙니다. 일부 데이터를 반환하는 사용자 구현 함수입니다. –
예가 혼란스럽게 보입니다. 첫 번째 발췌문은 'a'에 값을 명확하게 저장합니다. 그러나 두 번째 발췌 부분은'a'를 전혀 언급하지 않습니다. 왜 그렇습니까? –