我正在编写一个使用POSIX线程库的程序。我正在执行一些系统调用的返回值,例如:
if (pthread_join(temp, NULL) != 0) {
cerr << "system error\n" << endl;
exit(1);
}
我希望程序在通过此if条件时立即退出,但是当cpu决定在'exit(1)'命令之前切换到另一个线程时可能会出现问题。
有没有办法保护这种情况?
使用特殊的互斥锁对此无济于事,因为:
1.我有很多这样的调用,锁定每个会使代码变得非常慢,效率低下,而且大多数 - 非常难看!
2.每个互斥锁都需要自己的返回值检查!所以这显然无法解决最初的问题。
有什么帮助想法?
答案 0 :(得分:1)
使用GCC atomic写入常用变量。每个线程都应定期检查此变量。如果更改了此变量,请退出该线程。当所有其他线程都完成时,主线程会退出。
答案 1 :(得分:0)
看起来有一个答案,但我不知道它有多有效(即如果程序已经出现问题,这可能会或可能不会有效)。
Can I prevent a Linux user space pthread yielding in critical code?