私が持っているとしましょう:
class base
{
base(){f(this);};
static void f(base * b) {(b->d)++;};
int d;
};
2 つの別々のスレッドで base 型のオブジェクトを作成した場合、メソッドf
はスレッドセーフと見なされますか? 通常、私が知っていることから、メソッドをスレッドセーフにするためには、静的メンバーもグローバル変数も使用しないでください。しかし、上記の例からわかるように、変数をd
static にしないことに決めました。代わりに、base の実行中のインスタンスを介して呼び出します。
また、この行を保護する必要はないと思います :(b->d)++;
各スレッドはベースと変数 d の個別のインスタンスを持つため、ミューテックスを使用します。
私の分析は正しいですか?何か気をつけることはありますか?