用信号量编程,遇到个死锁问题,麻烦了

vincent_1011 2009-05-21 01:57:13
以下是案例:
我将一个DLL注入到10个进程中去。但是我只需要2个同时工作。就这样的轮流下去。

我已经用信号量实现了,问题是有可能一个拥有信号量的进程突然死掉,这时候它没释放信号量。

这种情况怎么解决??如果有查看哪个进程线程拥有信号量的API就好了
...全文
363 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
Wolf0403 2009-05-21
  • 打赏
  • 举报
回复
如果是被 Kill -9 或者 Terminate,at_exit 是不会被调用的。
猜想 3楼的方法是可以的。
linren 2009-05-21
  • 打赏
  • 举报
回复
方法一:
可以屏蔽可能导致进程结束的信号

方法二:
进程正常结束用on_exit函数来做收尾的处理
进程异常结束就使用异常处理的方法来处理
arthur 2009-05-21
  • 打赏
  • 举报
回复
Windows下,通告使用命名信号量和 OpenSemaphore 就可以吧。
  • 打赏
  • 举报
回复
[Quote=引用楼主 vincent_1011 的帖子:]
以下是案例:
我将一个DLL注入到10个进程中去。但是我只需要2个同时工作。就这样的轮流下去。

我已经用信号量实现了,问题是有可能一个拥有信号量的进程突然死掉,这时候它没释放信号量。

这种情况怎么解决??如果有查看哪个进程线程拥有信号量的API就好了
[/Quote]

给每个进程开守护进程,挂掉就恢复之
liliangbao 2009-05-21
  • 打赏
  • 举报
回复
帮顶!!!
vincent_1011 2009-05-21
  • 打赏
  • 举报
回复
基本想到怎么做的。

waitfor成功之后使用一个全局标记性变量,设置为true标记已经获取了信号量,

release后就标记为false。

在程序crash的时候,在全局SetUnhandleExceptionFilter设置的SEH就能捕获到。这时就判断下那个全局懂变量

若为true则release.

不过我觉得这里有个很特殊的问题,关于原子性。如果waitfor成功后还没设置标记量,或者

release 后还没设置标记量,程序就挂了的话,就傻了

当然这是相当极端的吧。希望不要发生,哈,

<顺便问题下有没办法能保证一个进程的一段代码原子性执行!这样上面问题就不会出现了。
vincent_1011 2009-05-21
  • 打赏
  • 举报
回复
要搞清楚。那个是内核对象的。并且并不是它创建的,他只是open 来使用而已
rwjlqn 2009-05-21
  • 打赏
  • 举报
回复
用用shell搞搞它试试呗~~
hjjdebug 2009-05-21
  • 打赏
  • 举报
回复
帮顶,关注! 进程死掉后的资源回收。
vincent_1011 2009-05-21
  • 打赏
  • 举报
回复
啥意思?

就算回复了,信号量也没得到release啊。

而且进程挂掉是内存不能read之类的错误死的,昨晚睡觉想了下

不知道用SEH能搞不。。
chenzhp 2009-05-21
  • 打赏
  • 举报
回复
进程被挂掉,应该有一个消息通知吧

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧