Unix的信号处理中已经有类似的处理,在 POSIX 标准中,可以使用sigprocmask
来设置信号阻塞,使用sigpending检查被阻塞的信号。这个从原子性来说要比使用
自己的in_lock要好。
更好的处理一些是在信号处理函数里面不干什么事情,就设置标志。这样可以避
面发生竞争,从而不会发生问题。
【 在 zhch.bbs@bbs.nju.edu.cn 的大作中提到: 】
: 如果程序在lock中遇到了signal,容易出现一些问题甚至发生系统崩溃(当然几
: 率很低). 简单的处理方法是lock时屏蔽signal, 但这可能造成丢失讯息等负作
: 用.压制signal的方法效果会更好一些. 主要想法是收到signal时检查进程是否
: 处在某个flock之中。如果是则这个signal被压制,待到unlock时再检查是否有
: 被压制的signal, 如有则重新发送该signal. 这个方法在程序上实现比较简单
: , 只需包装lock和unlock, 此然后每个signal处理函数前面都加一句判断:
: if(sig_in_lock(signum)) return;
: ...................
--
FROM 166.111.3.49