sigsetjmp()与siglongjmp()

本文介绍了sigsetjmp()和siglongjmp()这两个函数在解决竞态问题中的应用。sigsetjmp用于建立跳转缓冲区,如果savesigs参数非0,则保存当前信号集。siglongjmp则实现局部跳转,可以从一个函数跳转到另一个函数,返回值为siglongjmp的第二个参数。同时提到了Linux中与进程ID相关的函数getpid()和getppid()。
摘要由CSDN通过智能技术生成

使用sigsetjmp()与siglongjmp()

int sigsetjmp(sigjmp_buf env, int savesigs);

void siglongjmp(sigjmp_buf env, int val);


解决竞态问题的另一个办法: 从信号函数中调用siglongjmp().

  1. siglongjmp() 作用: 局部跳转,使用它可以从一个函数跳至另一个函数.
  2. 使用sigsetjmp(), 建立跳转缓冲区.
    • 第一个参数: 当前程序环境变量; 第二个为非0 时, 标识: 保存当前的信号集, 非0, 标识: 标识不保存当前信号集.
    • 返回值: 设置跳转缓冲区时, 返回值为 0; 当调用siglongjmp()后, 返回值为 siglongjmp() 的第二个参数, 注意: 该参数必须为非0值

void sig_alarm(int sig)
{
    myprint("The func sig_alarm() is %d", sig);
    siglongjmp(env, 2);
}

void  test()
{
    int ret = 0
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值