2011-07-15 59 views
2

假設我有一些鍋爐板多線程代碼,例如:如下。我想知道有什麼保證(如果有)使用該代碼的多個線程將始終看到當前版本的狀態。我知道C++對內存模型保證很少,而且我認爲我在某處甚至可以聲明狀態變量可能沒有幫助。然而在實踐中,人們高興地使用boost :: thread,並且它的文檔沒有帶有一個大的警告,指出互斥體沒有用,除非你只使用外部狀態:-)我假設在幕後必須有一些提升的魔法,或者我應該每次做任何事情時都調用__sync_synchronize()?boost ::線程和內存模型

class Blah { 
    typedef (some horribly complex data structure) State; 
    State state; 
    boost::mutex m; 

(...) 

    void use() 
    { 
     boost::lock_guard<boost::mutex> dummy (m); 
     (do something to state, being especially careful to maintain invariants) 
    } 
}; 

回答

1

互斥鎖意味着內存屏障。 (雖然我無法在boost :: mutex文檔中找到它,但我保證它在文檔中說明了Boost依賴的每個互斥體實現的位置。)

此代碼沒問題。

+0

這裏記錄了pthread,這對我來說已經足夠了:http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap04.html#tag_04_11非常感謝您的回覆。 – Joe