c++ - 成员函数线程安全吗?

标签 c++ multithreading stdthread

我在服务器对象中有多个线程正在执行相同的任务。这些线程是使用 Server::* 例程初始化的。

在这个例程中有一个带有一些处理的无限循环。

我想知道对多个线程使用相同的方法是否是线程安全的?难怪对于类的字段,如果我想读取或写入它,我将使用互斥体。但是例程本身呢?

既然一个函数是一个地址,那些线程将在同一个内存区域中运行?

我是否需要为每个线程创建一个具有相同代码的方法?

Ps: 我用的是std::mutex(&Server::Task, this)

最佳答案

两个线程同时运行同一个函数(不管是不是成员函数)是没有问题的。

就指令而言,这类似于让两个线程同时读取同一个字段 - 没关系,它们都获得相同的值。当您有一种写入和一种读取,或两种写入时,您就会开始出现竞争条件。

关于c++ - 成员函数线程安全吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31419354/

相关文章:

c - 为什么在信号处理程序中使用互斥锁会出现问题?

c++ - 从 std::thread::id 结构中检索 Windows 线程标识符

C++11 线程 : Error passing a vector to a thread function

c++ - 如果我在 Linux 上有 Pthread 代码,在 std::thread 中实现相同的代码是否有优势?

c++ - 我可以使用什么 STL 函数来替换 "while (var != nullptr)"循环?

c++ - 我们如何从 C++ 中的子类调用父重载构造函数?

multithreading - 如何在 Julia 0.5-dev 的单独线程中调用函数?

c++ - 寻找一种在 std::map 上自定义迭代器的方法

c++ - std::map.find 上的 Sigbus

c - 在 Tesla K80 集群中使用点对点获取 nan 结果