我在Linux(CentOS 5.3)上有一个C++程序,它产生多个线程,这些线程处于无限循环中以执行作业并在某些时间内休眠.现在我必须取消正在运行的线程以防新的配置通知进入并重新启动新的线程集,我已经使用了pthread_cancel.我观察到的是,即使在接收到取消指示后,线程也没有停止,甚至在睡眠完成后一些睡眠线程也会出现.
由于不需要这种行为,在上述场景中使用pthread_cancel会引发关于好坏练习的问题.
请评论上述场景中的pthread_cancel用法.
这是在C++中使用线程报告计算进度的后续问题.
假设我有一个for执行run_difficult_task()多次的循环,我想推断循环已经推进了多远.我以前写过:
int i;
for (i=0; i < 10000; ++i) {
run_difficult_task(i);
if (i % 100 == 0) {
printf("i = %d\n", i);
}
}
Run Code Online (Sandbox Code Playgroud)
但这种方法的主要问题是,执行run_difficult_task()可能从字面上永远走(由被卡在一个无限循环等),所以我想获得每一个进展报告k打印出循环变量的值来秒i.
我在这个网站上发现了很多关于面向对象多线程(我并不是很熟悉)的各种编程语言的文献,但我发现用C风格做这个问题看起来已经过时了.有平台无关的C11方式可以做我想要的吗?如果没有,那么我会对使用unix和gcc的方法感兴趣.
注意:我不希望run_difficult_task并行运行各种实例(例如,使用OpenMP),但我希望for并行运行循环和报告机制.