我正在研究多线程函数,该函数定义为成员函数并使用对象的公共变量。
我正在考虑两种方法:
1。全局变量
static int var = 0;
class Object {
void specialOp { var++; }
}
2。静态数据成员
class Object {
static int var = 0;
void specialOp { var++; }
}
我更喜欢第二种选择,但是当我在互联网上浏览时,并没有找到静态数据成员的实现来知道我是否需要锁,或者是否比使用复杂性更高?在全局变量中。
答案 0 :(得分:4)
C ++中的static
关键字根据使用位置的不同而有所不同。
Class::variable
在任何文件中进行访问,但要符合该类的访问说明(也需要在cpp文件中声明)但是没有一个能够解决多线程问题。要解决多线程问题,您有几种选择:
thread_local
。这意味着每个线程都有自己的变量版本。std::atomic
或其他类似std::mutex
的线程同步原语来保护多重访问