++的實現原子交換(https://gcc.gnu.org/ml/libstdc++/2014-10/msg00154.html):如何是性病的原子交換:基於關閉的libstdc的shared_ptr中的libstdC++正確
它看起來像16個互斥體是靜態分配的。當需要進行原子交換時,交換代碼會散列2個指針,以交換到這些靜態互斥鎖,鎖和交換中的一個(或兩個)。但是,如果shared_ptr在線程之間共享並且正在被併發訪問,那麼互斥體如何幫助保證併發訪問和修改的同步?我猜測代碼假定內部原始指針的正確對齊,但這是一個x86規則,而不是C++的保證。我錯過了什麼讓交換原子和正確,沒有額外的鎖定每個基本原始指針的讀取?
標準庫實現可以自由地依賴平臺特定的細節。 – molbdnilo