gpt4 book ai didi

c++ - 我可以在一个线程中写入变量并在 C++ 中的另一个线程中读取它吗

转载 作者:太空宇宙 更新时间:2023-11-04 15:17:08 25 4
gpt4 key购买 nike

我知道我可以使用信号量或互斥量以及...,但我想知道如果我在一个线程中写入一个变量并在另一个线程中读取它是否有任何问题?像这样的东西:

#include <iostream>
#include <thread>

volatile int value=0;

int main()
{
auto workerThread = new std::thread([&]()
{
for(int i=0;i<10000;++i)
{
value=i;
std::this_thread::sleep_for(std::chrono::milliseconds(i*100));
}
}
);

while(true)
{
std::cout<<value<<std::endl;
if(value >1000) break;
std::this_thread::sleep_for(std::chrono::milliseconds(10));
}
}

它是否安全且没有气味?

没有任何复杂性,我可以改进它吗?

最佳答案

不,这不“安全”。

谁告诉你的volatile是你需要让这个安全的东西是错误的

要么包装对value的访问在互斥量或信号量中,或将其设为 std::atomic<int> .

另请注意:

std::cout<<value<<std::endl;
if(value >1000) break;

可能每个读取不同的值。您可能只想阅读一次:

int v = value;
std::cout << v << std::endl;
if(v > 1000) break;

关于c++ - 我可以在一个线程中写入变量并在 C++ 中的另一个线程中读取它吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29966295/

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