codecola 发表于 2009-12-5 09:38:42

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 编辑 ]

wishel 发表于 2009-12-6 17:42:54

建议在raise(SIGSTOP);后再把锁收回。也就是
      g_mutex.release();
      raise(SIGSTOP);
      g_mutex.acquire();

处理进程收到SIGCONT后,会从raise返回继续执行,接着会返回先前func2()的中断处继续执行。
页: [1]
查看完整版本: ACE_Process_Mutex和SIGSTOP信号