gpt4 book ai didi

c++ - 如何确定其他线程是否正在运行?

转载 作者:行者123 更新时间:2023-11-27 22:45:11 27 4
gpt4 key购买 nike

我有一个“监视线程”,它检查其他线程是否正在运行并计算一些数据。如果这些线程结束,我也想完成我的 watch 线程。我该怎么做?

#include <iostream>
#include <thread>

using namespace std;

void f1() {
cout << "thread t1" << endl;
for (int i=0; i<1000; ++i) {
cout << "t1: " << i << endl;
}
}

void f2() {
cout << "thread t2" << endl;
while (T1_IS_RUNNING) {
cout << "t1 still running" << endl;
}
}

int main() {
thread t1(f1);
thread t2(f2);

t1.join();
t2.join();

return 0;
}

在上面的示例中,我需要实现T1_IS_RUNNING。任何想法如何去做?我的猜测是获取正在运行的线程数,但我没有在 STL 中找到任何相关方法。

有一个How to check if a std::thread is still running?已经,但我认为他们对我的案例使用了过于复杂的解决方案。一个简单的线程计数器 (std::atomic) 还不够好吗?

最佳答案

你可以只为它使用一个标志(running example):

#include <iostream>
#include <thread>

using namespace std;

bool T1_IS_RUNNING = true;
void f1() {
cout << "thread t1" << endl;
for (int i=0; i<1000; ++i) {
cout << "t1: " << i << endl;
}
T1_IS_RUNNING = false;
cout << "thread t1 finish" << endl;
}

void f2() {
cout << "thread t2" << endl;
while (T1_IS_RUNNING) {
cout << "t1 still running" << endl;
}
cout << "thread t2 finish" << endl;
}

int main() {
thread t1(f1);
thread t2(f2);

t1.join();
t2.join();

return 0;
}

这是安全的,只要其中一个写入标志而另一个读取标志,否则您需要使用原子标志、互斥锁或信号量。

关于c++ - 如何确定其他线程是否正在运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43910170/

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