나는 안토니 윌리엄스가 C++ Concurrency in Action을 읽고있다. 현재 그는 내가 memory_order_consume을 담당하는 지점에 있습니다.C++ memory_order_consume, kill_dependency, dependency-ordered-before, synchronizes-with
는 블록 후이 :
지금은 메모리 순서화의 기초를 다루었으니, 그것은
그것은 나에게 조금 무서워 더 복잡한 부품 보는 시간 왜냐하면 나는 여러 가지를 완전히 이해하지 못하기 때문입니다.
의존성 순서가 이전과 동기화가 어떻게 다릅니 까? 둘 다 일찍 발생하는 관계를 만듭니다. 정확한 차이점은 무엇입니까?
나는 다음의 예에 대한 혼란 스러워요 :
int global_data[]={ … };
std::atomic<int> index;
void f()
{
int i=index.load(std::memory_order_consume);
do_something_with(global_data[std::kill_dependency(i)]);
}
kill_dependency 정확히 무엇입니까? 어떤 종속성이 죽일까요? 엔티티간에? 그리고 컴파일러가 그 knowladge를 어떻게 활용할 수 있습니까?
memory_order_consume의 모든 출현을 안전하게 memory_order_acquire로 바꿀 수 있습니까? 나는. 그것은 모든 감각에서 더 엄격합니까? 리스팅 5.9에서
, 나는 안전하게
int data[5]
와
std::atomic<int> data[5]; // all accesses are relaxed
을 대체 할 수 있습니까? 나는. 획득 및 릴리스를 사용하여 비 원자 데이터에 대한 액세스를 동기화 할 수 있습니까?
그는 큐비클에있는 남자와 몇 가지 예를 통해 편안하고 획득하고 공개한다고 설명합니다. seq_cst와 비슷한 간단한 설명이 있고 소비합니까?
[\ std :: kill \ _dependency \'는 무엇을 할 수 있습니까? 왜 그것을 사용하고 싶습니까?] (http://stackoverflow.com/questions/7150395/what-does-stdkill- 의존성 - do-and-why-would-want-to-use-it) – Cubbi
@Cubbi, 나는 그것을 보았다 - 또 다른 예가있다. – qble