当前位置: 技术问答>linux和unix
进程、线程和信号屏蔽字的困惑
来源: 互联网 发布时间:2017-01-21
本文导语: 新手小白看《unix环境高级编程》 有点困惑 一个进程不是只有一个信号屏蔽字吗?一个进程可以创建多个线程,那么多个线程共享一个信号屏蔽字呀,为什么书上12.8节里说“每个线程都有自己的信...
新手小白看《unix环境高级编程》 有点困惑
一个进程不是只有一个信号屏蔽字吗?一个进程可以创建多个线程,那么多个线程共享一个信号屏蔽字呀,为什么书上12.8节里说“每个线程都有自己的信号屏蔽字,但是信号的处理时进程中所有线程共享的”???
还有啊,“sigprocmaskde 的行为在多线程的进程中并没有定义”,这样说的话,创建了线程就会使这个函数失去定义?还是包含了“pthread.h”就会使他失去定义?
向大家请教了。感觉这类的问题没人问很难想到到,知道了就觉得很好理解似的,小弟自学呀,从第一章开始已经到十二章了(^-^ 太偏的跳过去)。。。
一个进程不是只有一个信号屏蔽字吗?一个进程可以创建多个线程,那么多个线程共享一个信号屏蔽字呀,为什么书上12.8节里说“每个线程都有自己的信号屏蔽字,但是信号的处理时进程中所有线程共享的”???
还有啊,“sigprocmaskde 的行为在多线程的进程中并没有定义”,这样说的话,创建了线程就会使这个函数失去定义?还是包含了“pthread.h”就会使他失去定义?
向大家请教了。感觉这类的问题没人问很难想到到,知道了就觉得很好理解似的,小弟自学呀,从第一章开始已经到十二章了(^-^ 太偏的跳过去)。。。
|
创建线程的时候,线程继承了进程的信号屏蔽字,但是线程也可以使用pthread_sigmask 修改自己的屏蔽字
“sigprocmaskde 的行为在多线程的进程中并没有定义”,应该不是说没有定义吧,而是说行为是不确定的。
“sigprocmaskde 的行为在多线程的进程中并没有定义”,应该不是说没有定义吧,而是说行为是不确定的。
|
1楼解释的正确,楼主的未定义理解有偏差,是指在多线程环境中调用sigprocmask函数时函数的行为未给出标准定义,一般这么说就是调用时行为不确定,不同的实现也可能不同,都不一定是你想要达的效果。
|
多线程需要使用pthread_sigmask
http://pubs.opengroup.org/onlinepubs/009695399/functions/pthread_sigmask.html
http://pubs.opengroup.org/onlinepubs/009695399/functions/pthread_sigmask.html
|
英文版本的原话是“The behavior of sigprocmask is undefined in a multithreaded process. Threads have to use pthread_sigmask instead”