我需要一个互斥体来实现静态功能吗?

daB*_*bby 2 c++ multithreading mutex thread-safety

我有一个带有静态函数的C++类:

class Foo
{
public:
    static void bar(int &a)
    {
        a++;
    }
}
Run Code Online (Sandbox Code Playgroud)

编辑:
作为参数传递的变量仅在调用范围内使用.所以它不被另一个线程访问.

mutex当我从一个单独的线程中调用此函数时,我是否必须使用?

谢谢.

小智 9

调用此函数只需要线程本地资源,即线程堆栈.因此答案是否定的.如果int变量可以被多个调用线程访问,那么你需要一个mutexfor变量


Lig*_*ica 5

函数是否static存在与是否需要对其调用进行同步无关。

确定因素是函数是否可重入以及如何处理数据。在这种情况下,该函数是可重入的(因为它没有自己的非本地状态,或者实际上根本没有任何状态),并且数据由调用范围拥有/管理,因此您必须确定在调用范围内,该整数是否需要保护。

但是,无论bar是静态成员,非静态成员,自由函数,宏,猫,黑洞还是Jon Skeet的滚筒式烘干机,都是如此。