有没有办法让一个线程从一个无限的信号量等待过程被杀死?

Sha*_*shi 1 c windows multithreading semaphore hang

操作系统:Windows.语言:C

我有一个线程通过TCP向服务器发送请求,并在信号量上无限期等待响应.还有另一个线程读取套接字,将接收到的数据复制到公共缓冲区中,并使信号脉冲,以便从等待中退出.这一切都很好.但是在由于某种原因导致进程被终止的情况下,等待信号量的线程在其他线程终止时等待.

为什么线程等待信号量在进程被杀死时不会结束?我在Linux论坛上看到SEM_UNDO在这种情况下有所帮助.Windows上有类似的东西吗?任何解决方法?

Ray*_*hen 7

信号量没有所有者.如果你等待信号量,那么你正在等待任何人发出信号.没有办法宣称"这个人有责任发出信号,并且如果他在没有发出信号的情况下终止,那么我应该做点什么来恢复."

如果需要所有者可跟踪的同步对象,请使用互斥锁.或者,您可以让服务员等待其他进程句柄并在检测到其他进程已终止时执行恢复.