假设我们有一个线程程序。我们创建了一些资源(即互斥体),产生了自己初始化的线程,等待它们完成,然后破坏资源。
var x = document.getElementByClassName("playButton medium");
for (var i=0; i < x.length; i++) {
x[i].onclick = function() {
alert("clicked");
}
};
现在假设其中一个线程遗憾地在work_with_resources()期间收到了SIGTERM。这意味着线程的本地资源永远不会被销毁。
问题1:如何跟踪资源?是否有可能销毁被杀死的线程的本地资源?
问题2:被杀后的线程是否仍然可以加入? join()方法会立即返回吗?加入()和被杀死的线程是一个好习惯吗?
问题3:由于被杀死的线程可能使用了全局资源,因此它可能处于无效状态。有没有办法阻止所有其他线程使用全局资源来防止进一步的损坏?
C ++线程库是否与信号协同工作?
答案 0 :(得分:2)
首先,SIGTERM对不同版本的POSIX库表现不同。在2.6 SIGTERM将强制线程干净地退出。但是对于2.4,线程将处于不确定状态。
现在你的第一个问题: -
问题1:如何跟踪资源?是否有可能销毁被杀死的线程的本地资源?
在这种情况下,您无法跟踪资源,也无法再访问该主题。
现在你的第二个问题: -
问题2:被杀后的线程是否仍然可以加入? join()方法会立即返回吗?加入()和被杀死的线程是一个好习惯吗?
根本不是你的所有问题。
现在你的第三个问题: -
问题3:由于被杀死的线程可能使用了全局资源,因此它可能处于无效状态。有没有办法阻止所有其他线程使用全局资源来防止进一步的损坏?
在这种情况下,您可以使用pthread条件变量(pthread_cond_t)。