ACE_Process_Mutex和SIGSTOP信号
先介绍一下:有一个程序是多进程的,处理进程经常需要调用ACE_Guard<ACE_Process_Mutexx> guard(g_mutex)加解锁,有时候需要暂停处理进程。
如果对处理进程发送SIGSTOP信号,处理进程会阻塞,有可能g_mutex锁没有释放。
现在的设计是先对处理进程发送SIGTSTP,进入信号处理程序,采用:g_mutex.release()释放锁,然后再:raise(SIGSTOP),阻塞处理进程,此时信号处理程序也会被阻塞。
请问:
1. g_mutex能够被释放吗?
2. 在对处理进程发送SIGCONT后,程序是从信号处理程序继续执行,被暂停的程序段func1()并没有继续执行,对吗?
由于代码过长,且工作的机器不能上网,简易代码示例如下:
void sighandler(int signum)
{
if (signum == SIGTSTP)
{
g_mutex.release();
raise(SIGSTOP);
}
}
func1()
{
ACE_Guard<ACE_Process_Mutexx> guard(g_mutex);
func2();
}
[ 本帖最后由 codecola 于 2009-12-5 12:01 编辑 ] 建议在raise(SIGSTOP);后再把锁收回。也就是
g_mutex.release();
raise(SIGSTOP);
g_mutex.acquire();
处理进程收到SIGCONT后,会从raise返回继续执行,接着会返回先前func2()的中断处继续执行。
页:
[1]