我有很多线程和一个全局对象变量。线程使用此全局变量来调用该对象内部的许多函数。我没有共享数据。函数调用线程安全吗? 例如
ObjectClass
{
public:
funA() {}
funB() {}
funC() {}
};
ObjectClass *obj=new ObjectClass;
线程随机调用:
obj->funA();
obj->funB();
obj->funC();
答案 0 :(得分:3)
是的,这很安全。由于没有共享状态,因此无法进行数据争用。唯一的警告是,如果您的一个线程删除了该对象,而其他线程仍在尝试对该对象调用函数,则您将具有未定义的行为。
如果您的类确实是无状态的,那么您应该考虑制作所有这些函数static
,以便它们甚至不共享全局对象,或者如果您希望将函数的作用域限定为名称,则只需将它们放在命名空间中