找回密码
 用户注册

QQ登录

只需一步,快速开始

查看: 3296|回复: 1

ACE_Process_Mutex和SIGSTOP信号

[复制链接]
发表于 2009-12-5 09:38:42 | 显示全部楼层 |阅读模式
先介绍一下:有一个程序是多进程的,处理进程经常需要调用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 编辑 ]
发表于 2009-12-6 17:42:54 | 显示全部楼层
建议在raise(SIGSTOP);后再把锁收回。也就是
        g_mutex.release();
        raise(SIGSTOP);
        g_mutex.acquire();

处理进程收到SIGCONT后,会从raise返回继续执行,接着会返回先前func2()的中断处继续执行。
您需要登录后才可以回帖 登录 | 用户注册

本版积分规则

Archiver|手机版|小黑屋|ACE Developer ( 京ICP备06055248号 )

GMT+8, 2024-12-23 13:59 , Processed in 0.017295 second(s), 7 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表