【Linux】进程信号_4


八、进程信号

3. 信号的处理

当某个信号的处理函数被调用时,操作系统会自动将当前信号假如进程的信号屏蔽字当中。如果处理完该信号,该信号同样也会自动从信号屏蔽字中 移除。该行为的目的是为了防止信号进行嵌套捕捉。
Makefile

testsig:testSig.cc
	g++ -o $@ $^ -std=c++11
.PHONY:clean
clean:
	rm -f testsig

testSig

#include <iostream>
#include <signal.h>
#include <unistd.h>
using namespace std;

void Print(sigset_t sigset)
{
    cout << "Pending signals: ";
    for (int sig = 31; sig >= 1; sig--)
    {
        if (sigismember(&sigset, sig)) cout << 1;
        else cout << 0;
    }
    cout << endl;
}

void handler(int signo)
{
    cout << "Signal " << signo << endl;

    sigset_t pending;
    sigemptyset(&pending);
    while (true)
    {
        sigpending(&pending);
        Print(pending);
    }
}

int main()
{
    struct sigaction act, oact;
    act.sa_handler = handler;
    act.sa_flags = 0;

    sigemptyset(&act.sa_mask);

    sigaction(2, &act, &oact);

    while (true) sleep(1);
    return 0;
}

4. 可重入函数

可重入函数是指一个函数在多执行流环境下能够正确执行,并且不会产生不可预料的结果或错误。重入的意思是指该函数可以被重复调用,且每次调用都能够独立执行而不会影响其他调用。可重入函数可以保证数据独立性,避免数据混乱。
否则就是不可重入函数。
如下例子:
在这里插入图片描述
在上面的情况中,首次调用 insert 函数中,接收到信号捕捉,执行信号自定义处理函数,但是信号自定义处理函数中也调用了 insert 函数,这导致了 node2节点丢失 。这种会出现数据混乱的情况的函数就叫做 不可重入函数

5. volatile

volatile关键字的作用可以保证变量的可见性。通俗来讲就是对该变量不进行优化,指从内存中读取。在某些情况下,编译器会进行优化,导致结果不符合我们的预期,因此就需要 volatile 来修饰变量。


未完待续

相关推荐

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-09 22:48:08       66 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-09 22:48:08       70 阅读
  3. 在Django里面运行非项目文件

    2024-07-09 22:48:08       57 阅读
  4. Python语言-面向对象

    2024-07-09 22:48:08       68 阅读

热门阅读

  1. Android Enable 和clickable

    2024-07-09 22:48:08       22 阅读
  2. 0. python面试常见问题

    2024-07-09 22:48:08       23 阅读
  3. 配置linux的yum镜像为阿里镜像源

    2024-07-09 22:48:08       19 阅读
  4. Docker一键部署PostGIS

    2024-07-09 22:48:08       20 阅读
  5. C语言编程2:常用的数据类型

    2024-07-09 22:48:08       22 阅读
  6. 秒验 iOS端授权页添加自定义按钮

    2024-07-09 22:48:08       21 阅读
  7. 代码随想录算法训练营:23/60

    2024-07-09 22:48:08       23 阅读
  8. Android Camera API发展历程

    2024-07-09 22:48:08       19 阅读
  9. 工作日常学习记录

    2024-07-09 22:48:08       24 阅读
  10. ELK的储存、分析功能介绍!

    2024-07-09 22:48:08       23 阅读
  11. Linux实战记录

    2024-07-09 22:48:08       23 阅读
  12. 价值投资者什么时候卖出股票?

    2024-07-09 22:48:08       23 阅读