成员函数线程安全吗?

Thi*_*zou 5 c++ multithreading stdthread

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

在此例程中,存在一些处理的无限循环。

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

由于函数是地址,因此那些线程将在同一内存区中运行?

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

ps:我用std :: mutex(&Server :: Task,this)

use*_*751 5

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

就指令而言,这类似于有两个线程同时读取同一字段 - 这很好,它们都获得相同的值。当你进行一次写作和一次阅读,或者两次写作时,你就会开始出现竞争条件。


Tim*_*sen 4

在 C++ 中,每个线程都分配有自己的调用堆栈。这意味着仅存在于给定线程调用堆栈范围内的所有局部变量仅属于该线程。然而,在共享数据或资源的情况下,例如全局数据结构或数据库,不同的线程可以同时访问它们。解决此同步问题的一种方法是使用std::mutex,您已经在这样做了。