[英]Monitoring a shared variable with read write access by multiple threads in C++
[英]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.var1
和s.var2
是兩個不同的 memory 位置。 如果s.var1
僅由一個線程訪問,而s.var2
僅由某個其他線程訪問,則這些 memory 位置都不共享。
但請注意@SergeyA 警告您的虛假分享。 它不會影響程序的正確性,但可能會影響性能。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.