实际问题是,我尝试将新参数发送到正在运行的线程。 想法是更改线程中的变量,但没有用。 该代码应显示问题的简单示例。 更新后打印出来的变量test应该是1,但一直是0。 有人理解这个问题并可以提供帮助吗? 非常感谢!
#include <iostream>
#include <thread>
class MyThread {
public:
int test = 0;
void operator()() const {
while (1)
std::cout << test << std::endl;
}
/* other public or private class members */
};
int main() {
MyThread mythread;
std::thread t(mythread);
mythread.test = 1;
t.join();
return 0;
}
最佳答案
从多个线程访问变量必须使用一种称为“原子”的特殊类型的变量。在这种情况下,因为它是一个 int,所以应该写成 std::atomic<int> test;
.
您可以阅读更多有关原子和 C++ 内存模型的技术细节 here .
关于multithreading - 更新线程变量 (c++),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41650960/