操作系统: Windows。语言:C
我有一个线程,它通过TCP向服务器发送请求,并无限期地等待信号量的响应。还有另一个线程读取套接字,复制公共缓冲区中接收到的数据,并向信号量发送脉冲,使其退出等待。所有这些都运行得很好。但在进程由于某种原因被终止的情况下,等待信号量的线程会一直等待,而其他线程则会终止。
当进程被杀死时,线程等待信号量为什么不结束?我在Linux论坛上看到有SEM_UNDO可以帮助解决这种情况。Windows上也有类似的东西吗?有什么解决方法吗?
发布于 2011-11-18 23:12:55
Semaphores do not have owners。如果你在等待一个信号量,那么你就是在等待任何人给它发信号。没有办法宣布“这家伙有责任发出信号,如果他没有发出信号就终止了,那么我应该做点什么来恢复。”
如果您想要一个所有者可跟踪的同步对象,请使用互斥锁。或者,您也可以让等待器等待另一个进程句柄,并在检测到其他进程已终止时执行恢复。
发布于 2011-11-18 18:04:43
当一个进程终止(与TerminateProcess一样)时,此进程中的所有线程也将终止。没有例外。这就是系统的工作方式。如果某个线程仍然是活动的,那么这自动意味着它的进程也是活动的。所以,你看到的和你认为你看到的是不同的。要验证进程是否真的被“杀死”(或在Windows环境中终止),请使用任务管理器和进程选项卡。
https://stackoverflow.com/questions/8180618
复制相似问题