讓我們假設我有一個:線程安全和靜態函數
class base
{
base(){f(this);};
static void f(base * b) {(b->d)++;};
int d;
};
現在,如果在2個單獨的線程創建型基地的目標,將方法f
被認爲是線程安全的? 我在問這個問題,因爲通常從我所知道的是一個方法是線程安全的,它不應該使用靜態成員或全局變量。但是從上面的示例中可以看出,我決定不使變量d
爲靜態,而是通過base的運行實例調用它。
此外,我認爲我不需要保護這一行:(b->d)++;
與互斥體,因爲每個線程將有一個單獨的基地實例和變量d。
我的分析正確嗎?有什麼我應該注意的嗎?
你是正確的,只要基本指針是線程特定的你是好的。 – perreal
你能編譯你的程序嗎?它應該吐出編譯錯誤 – stamhaney
@stamhaney,不,我沒有我只是試圖找出理論:)請指出問題雖然 – Kam