关于线程的设计问题

时间:2010-03-09 17:26:09

标签: c++ multithreading

我有A班和B班和C班。 B类运行一个线程,C类运行n个线程。 A类应该启动线程而不是等待来自用户的信号(比如Linux中的Ctrl-c) - A类将停止所有线程(B类和C类),做一些最终工作,应用程序将退出。

问题是:A级应该如何睡觉直到收到信号?什么是最好的实施?

3 个答案:

答案 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问题。

在不知道其他线程正在做什么的情况下也有点宽泛。