0
正在從兩個不同的POSIX線程訪問同一對象的兩個不同類成員,同時被認爲是C++ 03中的線程安全?線程安全地訪問類成員
正在從兩個不同的POSIX線程訪問同一對象的兩個不同類成員,同時被認爲是C++ 03中的線程安全?線程安全地訪問類成員
號(具有「是」有點語音)
從視C++ 03標準的角度來看,作爲線程沒有這樣的東西存在,所以有任何不存在的條件下,其該標準將任何涉及併發性的內容視爲「安全」。雖然這通常沒有問題(在C++範圍之外的一點注意和適當的同步原語,它將「無論如何」),但有幾件事要注意,其中包括:
errno
(和其他結構)可能不是線程本地的。命令行選項-pthread
主要解決這個問題。
在C++ 03中沒有標準的內存模型,所以從C++標準的角度來看這個問題是不可能的。 – kraskevich
由於它們是不同的內存位置,儘管無論內存/一致性模型如何,它都應該是線程安全的,除非線程試圖在這些成員上進行同步。 – computador7
@ computador7我們特別需要C++中的內存模型,因爲你所說的不是真實的 - 如果編譯器不知道某個環境是多線程的,它將執行多種優化,這些優化往往涉及觸及不應該存在於內存中的內存位置多線程環境。也就是說,'-pthread'應該至少可以部分解決這個問題。 – Griwes