gpt4 book ai didi

c++ - 在 C++ 中,如何重用已完成执行的标准线程?

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:02:10 27 4
gpt4 key购买 nike

我的 C++ 方法的 main() 方法中有这行代码:

std::thread foo (bar);

这很好用。但是,我想根据外部输入随时运行同一个线程。我怎样才能重新使用这个线程来再次运行线程?

我这样做的原因是我有两个函数需要同时运行:一个是阻塞函数,接受输入 x,并按设定的时间间隔将数据输出到输出。另一个是阻塞并根据外部输入产生输出 y。这基本上应该是这样的:

int shared_x = 0;
int producer_x = 0;
int consumer_x = 0;

std::thread producer (foo); //Modifies foo_x
std::thread consumer (bar); //Outputs based on foo2_x
while( ;; ) {
if(producer .join()) {
shared_x = producer_x;
//How should I restart the thread here?
}
if(consumer.join()) {
consumer_x = shared_x;
//Here too?
}
}

这似乎解决了整个线程安全问题并且允许它们同时安全地运行而几乎没有等待时间。唯一的问题是我不知道如何重新启动线程。我该怎么做?

最佳答案

阅读一些文档后,我发现这是可行的:

myOldThread = thread(foobar);

我假设仍然有相当多的性能开销,但至少我可以重用相同的变量。 :/


另一种方法是永远不要让线程死掉(有一个延迟为 200 毫秒的循环,用于检查受互斥锁保护的 bool 值,以确定何时应该再次运行)。不是 super 干净,但如果性能很重要,这可能是最好的方法。

关于c++ - 在 C++ 中,如何重用已完成执行的标准线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26417369/

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