【发布时间】:2011-04-08 00:03:12
【问题描述】:
我正在编写一个使用 POSIX 线程库的程序。我正在执行一些系统调用的返回值,例如:
if (pthread_join(temp, NULL) != 0) {
cerr << "system error\n" << endl;
exit(1);
}
我希望程序在通过此 if 条件时立即退出,但是当 cpu 决定在“exit(1)”命令之前切换到不同的线程时可能会出现问题。
有没有办法保护这种情况?
为此使用特殊的互斥锁无济于事,因为:
1. 我有很多这样的调用,并且锁定每个调用会使代码变得非常缓慢、低效,而且大多数情况下 - 非常难看!
2.每个互斥体都需要自己的返回值检查!所以这显然不能解决最初的问题..
有什么帮助的想法吗?
【问题讨论】:
-
为您格式化了代码。将来,请花时间自己做这件事。我只花了大约 3 秒。
-
您能解释一下比赛条件吗?我认为这里显示的内容没有任何问题。即使内核确实切换了,它也会回来并且程序将(最终)退出。这是非常不稳定或时间敏感的事情吗?
-
@Jenna 请解释为什么需要防止潜在的上下文切换。
-
@JohnDibling:以后请多花3秒多一点,好好做。
-
@Chris:问题是,如果我在加入或解锁时遇到故障,而不是继续运行一段时间 - 我有时会遇到段错误或死锁,因为程序是不适合跑步 - 这就是为什么我首先退出......