簡體   English   中英

多線程寫入 c++ 中共享 object 的不同變量可以嗎

[英]is it ok that multi threads write to different variables of a shared object in c++

所以這個共享的 object 是這樣的(僅用於演示,不是工作的):

class Shared{
int var1;
int var2;

public:
    void setter1(int var){
        var1=var;
    }

    void setter2(int var){
        var2=var;
    }

}

thread1 可以在沒有任何競爭條件或問題的情況下同時執行thread1 shared->setter1(3)thread2 shared->setter2(2)嗎?

是的,您可以在兩個獨立線程中訪問Shared object 的各個子對象而無需同步,這不會是競爭條件。 cppreference上給出了外行的解釋,這里是部分引用:

始終允許不同的執行線程同時訪問(讀取和修改)不同的 memory 位置,沒有干擾,也沒有同步要求。

但是,請注意虛假分享 您的代碼似乎很容易出現這種情況。

您的示例中沒有共享。 當您談論線程之間共享的內容時,唯一重要的是 memory 位置。

如果你有一個Shared s; ,則s.var1s.var2是兩個不同的 memory 位置。 如果s.var1僅由一個線程訪問,而s.var2僅由某個其他線程訪問,則這些 memory 位置都不共享。

但請注意@SergeyA 警告您的虛假分享。 它不會影響程序的正確性,但可能會影響性能。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM