c - 当进程被终止时,有没有办法让线程从无限信号量等待中出来?

标签 c windows multithreading semaphore freeze

操作系统:Windows。 语言:C

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

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

最佳答案

Semaphores do not have owners .如果您等待信号量,那么您就是在等待任何人 向它发出信号。没有办法声明“发出信号量是这个人的责任,如果他没有发出信号就终止了,那么我应该做点什么来恢复。”

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

关于c - 当进程被终止时,有没有办法让线程从无限信号量等待中出来?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8180618/

相关文章:

c - AVR 外部中断反弹

c - 如何在while循环中编写if条件来终止它

c - 一个文件中注释的字符数(C编程)

windows - 如何重启rabbitmq中的erl.exe和epmd.exe?

c++ - 在 openmp 中使用不同线程组装 vector 时缩放比例不佳

c++ 将各种参数传递给父类构造函数(线程c++11)

c - 使用汇编器和 C 接口(interface)执行多项操作

windows - Windows 注册表中的应用程序显示名称部分匹配?

windows - 无法启动 Cassandra DataStax DDC 服务器

java - Java RMI和高级多线程