c++ 面向对象的静态函数 多线程调用

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c++ 面向对象的静态函数 多线程调用相关的知识,希望对你有一定的参考价值。

我想问下,我有两个线程调用同一份静态代码用不用加锁进行一下保护啊?比如:
Class A中 定义
static int ReadXX(); .....
我在线程Thread1中调用
void run()

while(1)

int x=A::ReadXX();


在Thread2线程中也调用
void run()

while(1)

int c=A::ReadXX();


在调研A::ReadXX()的时候用不用 添加一个全局MUTEX 进行保护啊??
我是想,因为静态函数,在类内存中只有一份,那么我两个线程同时调用的时候会不会出问题?

如果共享某种复杂的数据结构,要保证数据正确性就要加锁。只是读取的话没什么大问题,如果有数据写入操作,不加锁两边同时写入可能会破坏数据。追问

我是在想,因为他是静态代码,在类的内存中只有一份,那么我在两个线程同时调用会不会出问题?静态函数有读有写,但是读写的不是同一个文件,通过参数传递进去,读写不同的文件

追答

无论是静态函数还是非静态函数 函数字节码在内存中都只有一份,区别在于非静态函数的调用绑定了 对象的this指针。代码公用不会有问题,问题在于影响代码执行的数据在多线程下是否安全。你得更细致的了解一下编译和加载过程。这个静态函数有木有修改一些共享的变量?如果有,那可能会出问题。

参考技术A 你自己试一下不就知道了 别人说的不一定对 不要什么都拿来问

以上是关于c++ 面向对象的静态函数 多线程调用的主要内容,如果未能解决你的问题,请参考以下文章

4CPP 面向对象之 ——多态多继承static 成员const 成员

C++面向对象:静态成员和静态成员函数

c++ 全局静态函数的理解

C++面向对象编程:对象的内存分配与静态成员

C++面向对象编程:对象的内存分配与静态成员

C++ - 全局静态对象和局部静态对象的构造函数调用不同?