我在閱讀Anthony Williams的C++ Concurrency in Action。目前我在他desribes memory_order_consume點。C++ memory_order_consume,kill_dependency,dependency-ordered-before,與...同步
該塊之後有:
現在,我已經覆蓋了內存排序的基礎,它的時間來看看 更復雜的部件
這讓我害怕一點點因爲我沒有完全理解幾件事情:
如何依賴性排序之前不同步與同步?他們都創造了發生之前的關係。什麼是確切的區別?
我感到困惑下面的例子:
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究竟怎麼辦?它殺死哪個依賴關係?在哪些實體之間?以及編譯器如何利用知識庫?
memory_order_consume的所有居民都可以安全地用memory_order_acquire替換嗎?即所有的感官都更嚴格嗎?
在清單5.9,可我安全地
int data[5]
更換
std::atomic<int> data[5]; // all accesses are relaxed
?即可以獲取並釋放用於同步對非原子數據的訪問嗎?
他描述了放寬,獲取和釋放一些例子與男孩在房間裏。是否有一些類似的seq_cst簡單描述和消耗?
的可能重複[這是什麼\'的std ::殺\ _dependency \'做的,我爲什麼要使用它?(http://stackoverflow.com/questions/7150395/what-does-stdkill-依賴關係做和爲什麼要我想要使用它) – Cubbi 2013-02-09 05:03:10
@Cubbi,我看到它 - 還有另一個例子。 – qble 2013-02-09 07:53:35