首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >当进程被杀死时,有没有办法让线程从无限的信号量中出来等待?

当进程被杀死时,有没有办法让线程从无限的信号量中出来等待?
EN

Stack Overflow用户
提问于 2011-11-18 17:58:09
回答 2查看 1.4K关注 0票数 1

操作系统: Windows。语言:C

我有一个线程,它通过TCP向服务器发送请求,并无限期地等待信号量的响应。还有另一个线程读取套接字,复制公共缓冲区中接收到的数据,并向信号量发送脉冲,使其退出等待。所有这些都运行得很好。但在进程由于某种原因被终止的情况下,等待信号量的线程会一直等待,而其他线程则会终止。

当进程被杀死时,线程等待信号量为什么不结束?我在Linux论坛上看到有SEM_UNDO可以帮助解决这种情况。Windows上也有类似的东西吗?有什么解决方法吗?

EN

回答 2

Stack Overflow用户

发布于 2011-11-18 23:12:55

Semaphores do not have owners。如果你在等待一个信号量,那么你就是在等待任何人给它发信号。没有办法宣布“这家伙有责任发出信号,如果他没有发出信号就终止了,那么我应该做点什么来恢复。”

如果您想要一个所有者可跟踪的同步对象,请使用互斥锁。或者,您也可以让等待器等待另一个进程句柄,并在检测到其他进程已终止时执行恢复。

票数 7
EN

Stack Overflow用户

发布于 2011-11-18 18:04:43

当一个进程终止(与TerminateProcess一样)时,此进程中的所有线程也将终止。没有例外。这就是系统的工作方式。如果某个线程仍然是活动的,那么这自动意味着它的进程也是活动的。所以,你看到的和你认为你看到的是不同的。要验证进程是否真的被“杀死”(或在Windows环境中终止),请使用任务管理器和进程选项卡。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8180618

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档