全局变量的线程和函数调用安全性

时间:2018-07-18 19:48:40

标签: c++ multithreading thread-safety global-variables

我有很多线程和一个全局对象变量。线程使用此全局变量来调用该对象内部的许多函数。我没有共享数据。函数调用线程安全吗? 例如

ObjectClass
{
    public:
    funA() {}
    funB() {}
    funC() {}
};

ObjectClass *obj=new ObjectClass;

线程随机调用:

obj->funA();
obj->funB();
obj->funC();

1 个答案:

答案 0 :(得分:3)

是的,这很安全。由于没有共享状态,因此无法进行数据争用。唯一的警告是,如果您的一个线程删除了该对象,而其他线程仍在尝试对该对象调用函数,则您将具有未定义的行为。

如果您的类确实是无状态的,那么您应该考虑制作所有这些函数static,以便它们甚至不共享全局对象,或者如果您希望将函数的作用域限定为名称,则只需将它们放在命名空间中