我有A班和B班和C班。 B类运行一个线程,C类运行n个线程。 A类应该启动线程而不是等待来自用户的信号(比如Linux中的Ctrl-c) - A类将停止所有线程(B类和C类),做一些最终工作,应用程序将退出。
问题是:A级应该如何睡觉直到收到信号?什么是最好的实施?
答案 0 :(得分:2)
听起来像条件变量的工作。有一个关于如何使用pthreads条件变量here的教程和另一个关于维基百科here
的教程基本的approcah是你想要杀死的所有线程定期调用pthread_cond_timedwait来检查是否已经从A类发送了一个信号。
在伪代码中,B类和C类中的每个线程看起来都是这样的
while (!pthread_cond_timedwait(/*some args (including a timeout)*/ ) {
doSomeSmallUnitOfWork;
}
然后在A类的信号处理程序中捕获CTRL-C(或任何信号)
pthread_cont_signal(/*some more args*/);
答案 1 :(得分:1)
您可能需要检查sigwait。该方法采用一组信号并等待信号到达。
答案 2 :(得分:0)
对旋转锁进行一些研究。这是一个非常基本的并发101问题。
在不知道其他线程正在做什么的情况下也有点宽泛。