在多线程程序中退出程序

时间:2011-04-07 15:34:40

标签: c++ pthreads exit

我正在编写一个使用POSIX线程库的程序。我正在执行一些系统调用的返回值,例如:

if (pthread_join(temp, NULL) != 0) {  
    cerr << "system error\n" << endl;  
    exit(1);  
}  

我希望程序在通过此if条件时立即退出,但是当cpu决定在'exit(1)'命令之前切换到另一个线程时可能会出现问题。
有没有办法保护这种情况?

使用特殊的互斥锁对此无济于事,因为: 1.我有很多这样的调用,锁定每个会使代码变得非常慢,效率低下,而且大多数 - 非常难看! 2.每个互斥锁都需要自己的返回值检查!所以这显然无法解决最初的问题。
有什么帮助想法?

2 个答案:

答案 0 :(得分:1)

使用GCC atomic写入常用变量。每个线程都应定期检查此变量。如果更改了此变量,请退出该线程。当所有其他线程都完成时,主线程会退出。

One more link.

答案 1 :(得分:0)

看起来有一个答案,但我不知道它有多有效(即如果程序已经出现问题,这可能会或可能不会有效)。

Can I prevent a Linux user space pthread yielding in critical code?