gpt4 book ai didi

multithreading - 更新线程变量 (c++)

转载 作者:行者123 更新时间:2023-12-04 04:33:17 25 4
gpt4 key购买 nike

实际问题是,我尝试将新参数发送到正在运行的线程。想法是更改线程中的变量,但没有用。该代码应显示问题的简单示例。更新后打印出来的变量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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com