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