sigset_t(事件)

信号集  结构体

sem_t  长整型的数

 

sigset_t
  号集及信号集操作函数:信号集被定义为一种数据类型:
  typedef struct {
  unsigned long sig[_NSIG_WORDS];
  } sigset_t
  信号集用来描述信号的集合,linux所支持的所有信号可以全部或部分的出现在信号集中,主要与信号阻塞相关函数配合使用。下面是为信号集操作定义的相关函数:
  int sigemptyset(sigset_t *set);
  int sigfillset(sigset_t *set);
  int sigaddset(sigset_t *set, int signum)
  int sigdelset(sigset_t *set, int signum);
  int sigismember(const sigset_t *set, int signum);
  头文件
  #include <signal.h>
  sigemptyset(sigset_t *set)初始化由set指定的信号集,信号集里面的所有信号被清空;
  sigfillset(sigset_t *set)调用该函数后,set指向的信号集中将包含linux支持的64种信号;
  sigaddset(sigset_t *set, int signum)在set指向的信号集中加入signum信号;
  sigdelset(sigset_t *set, int signum)在set指向的信号集中删除signum信号;
  sigismember(const sigset_t *set, int signum)判定信号signum是否在set指向的信号集中。

pthread_sigmask

POSIX 线程 – pthread_sigmask
在多线程的程序里,希望只在主线程中处理信号,可以使用该函数。
 
POSIX线程– pthread_sigmask
在多线程的程序里,希望只在主线程中处理信号,可以使用
函数:
int pthread_sigmask (int how,const sigset_t *set,sigset_t *oset)

  用作在主调线程里控制信号掩码。
How:
SIG_BLOCK:结果集是当前集合参数集的并集;SIG_UNBLOCK:结果集是当前集合参数集的差集;SIG_SETMASK:结果集是由参数集指向的集
头文件:<signal.h>
错误:[EINVAL] how不是已定义值
  提示:除非信号在所有的线程里都阻塞,否则总能将异步信号传输给这个进程。
解释:
每个线程均有自己的信号屏蔽集(信号掩码),可以使用pthread_sigmask函数来屏蔽某个线程对某些信号的
响应处理,仅留下需要处理该信号的线程来处理指定的信号。实现方式是:利用线程信号屏蔽集的继承关系
(在主进程中对sigmask进行设置后,主进程创建出来的线程将继承主进程的掩码)
复制代码
复制代码
static const int exceptsigs[] = {
    SIGCHLD, SIGIO, SIGURG, SIGWINCH,
    SIGSTOP, SIGTSTP, SIGTTIN, SIGTTOU, SIGCONT,
    -1,
}; 
   sigset_t sigset;
    sigfillset(&sigset);
    for (i = 0; exceptsigs[i] != -1; i++)
    {
        sigdelset(&sigset, exceptsigs[i]);
    }
    pthread_sigmask(SIG_BLOCK, &sigset, NULL);
复制代码
复制代码

 

【转】:https://www.cnblogs.com/yuguangyuan/p/10313296.html

posted on   lydstory  阅读(1881)  评论(0编辑  收藏  举报

编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

点击右上角即可分享
微信分享提示