pthread_attr_setsigmask_np函数用法详解
pthread_attr_setsigmask_np函数简介
- 头文件包含
#include <pthread.h>
- 函数定义
int pthread_attr_setsigmask_np(pthread_attr_t * attr ,
const sigset_t * sigmask );
int pthread_attr_getsigmask_np(const pthread_attr_t * attr ,
sigset_t * sigmask );
- 编译链接选项
-pthread
pthread_attr_setsigmask_np函数常见使用错误
- 链接错误
undefined reference to `pthread_attr_setsigmask_np'
解决办法:添加链接选项
-pthread
- 编译错误
warning: implicit declaration of function ‘pthread_attr_setsigmask_np’ [-Wimplicit-function-declaration]
解决办法:包含头文件
#include <pthread.h>
pthread_attr_setsigmask_np函数详细描述
pthread_attr_setsigmask_np ()函数将attr引用的thread attributes对象的信号掩码属性设置为*sigmask 中指定的值,如果sigmask指定为NULL,则取消设置attr中任何现有的信号掩码属性。
pthread_attr_getsigmask_np ()函数返回attr在sigmask 指向的缓冲区中引用的thread attributes对象的信号掩码属性如果信号掩码属性当前未设置,则该函数返回特殊值 PTHREAD_ATTR_NO_SIGMASK_NP 作为其结果。
pthread_attr_setsigmask_np函数返回值
pthread_attr_setsigmask_np ()函数在成功时返回0,或在失败时返回非零错误号。
pthread_attr_getsigmask_np ()函数返回0或PTHREAD_ATTR_NO_SIGMASK_NP 当返回0时,信号掩码属性通过sigmask 返回。返回值 PTHREAD_ATTR_NO_SIGMASK_NP 表示信号掩码属性未在attr 中设置
如果发生错误,这些函数将返回一个正的错误号。
pthread_attr_setsigmask_np函数错误码
- ENOMEM ( pthread_attr_setsigmask_np ())无法分配内存。
pthread_attr_setsigmask_np函数其他说明
信号掩码属性确定将分配给使用thread attributes对象attr 创建的线程的信号掩码,如果未设置此属性,则使用attr创建的线程将继承创建线程的信号掩码的副本。
有关信号掩码的更多详细信息,请参见sigprocmask (2)有关可用于操作和检查信号集的宏集的说明,请参见sigsetops (3)
在没有pthread_attr_setsigmask_np ()的情况下,可以创建具有所需信号掩码的线程,如下所示:
- 创建线程使用pthread_sigmask (3)保存其当前信号掩码,并将其掩码设置为阻止所有信号。
- 然后使用pthread_create ();创建新线程,新线程将继承创建线程的信号掩码。
- 新线程使用pthread_sigmask (3)将其信号掩码设置为所需的值
- 创建线程将其信号掩码还原为原始值。
按照上述步骤,在新线程将其信号掩码调整到所需的值之前,新线程不可能接收到信号。
评论区