sigsuspend函数-数据流图到模块结构图的直接转换方法

时间:2024-07-12 01:23:47
【文件属性】:

文件名称:sigsuspend函数-数据流图到模块结构图的直接转换方法

文件大小:5.82MB

文件格式:PDF

更新时间:2024-07-12 01:23:47

APUE UNIX

10.16 sigsuspend函数 上面已经说明,更改进程的信号屏蔽字可以阻塞或解除阻塞所选择的信号。使用这种技术 可以保护不希望由信号中断的代码临界区。如果希望对一个信号解除阻塞,然后 p a u s e以等待以 前被阻塞的信号发生,则又将如何呢? 假定信号是S I G I N T,实现这一点的一种不正确的方法是: 如果在解除对S I G I N T的阻塞和p a u s e之间发生了S I G I N T信号,则此信号被丢失。这是早期 的不可靠信号机制的另一个问题。 为了纠正此问题,需要在一个原子操作中实现恢复信号屏蔽字,然后使进程睡眠,这种功 能是由s i g s u s p e n d函数所提供的。 #include int sigsuspend(const sigset_t *s i g m a s k) ; 返回:-1, errno设置为E I N T R 进程的信号屏蔽字设置为由 s i g m a s k指向的值。在捕捉到一个信号或发生了一个会终止该进程 的信号之前,该进程也被挂起。如果捕捉到一个信号而且从该信号处理程序返回,则 s i g s u s p e n d返回,并且该进程的信号屏蔽字设置为调用 s i g s u s p e n d之前的值。 注意,此函数没有成功返回值。如果它返回到调用者,则总是返回- 1,并且e r r n o设置为 E I N T R (表示一个被中断的系统调用)。 实例 程序1 0 - 1 5显示了保护临界区,使其不被指定的信号中断的正确方法。 程序10-15 保护临界区不被信号中断 第 1 0章 信 号 2 2 9


网友评论