假设我有一个:
class base
{
base(){f(this);};
static void f(base * b) {(b->d)++;};
int d;
};
现在,如果我在 2 个单独的线程上创建了一个 base 类型的对象,方法f
会被认为是线程安全的吗?我问这个问题是因为通常据我所知,对于线程安全的方法,它不应该使用静态成员或全局变量。但正如你从上面的例子中看到的那样,我决定不将变量设为d
静态,而是通过 base 的运行实例调用它。
另外,我认为我不需要保护这一行:(b->d)++;
使用互斥锁,因为每个线程都有一个单独的基实例和变量 d。
我的分析正确吗?有什么我需要注意的吗?