【发布时间】:2020-02-03 12:35:30
【问题描述】:
我为两个使用 pthread_sigmask 的可执行文件共享了代码。其中一个可执行文件具有 pthread 线程,另一个只是一个进程。可以在没有线程的情况下调用 pthread_sigmask 还是应该在第二种情况下使用 sigprocmask?
【问题讨论】:
-
你总是有线程。如果您“没有线程”,那么您只有一个线程。
我为两个使用 pthread_sigmask 的可执行文件共享了代码。其中一个可执行文件具有 pthread 线程,另一个只是一个进程。可以在没有线程的情况下调用 pthread_sigmask 还是应该在第二种情况下使用 sigprocmask?
【问题讨论】:
pthread_sigmask() 函数应检查或更改(或两者) 调用线程的信号掩码,与线程数无关 过程。该函数应等效于 sigprocmask(), 没有在单线程中进行调用的限制 过程。
在单线程进程中,sigprocmask() 函数应检查 或更改(或两者)调用线程的信号掩码。
来自sigprocmask:
在单线程进程中,sigprocmask() 函数允许调用进程检查或更改(或两者)调用线程的信号掩码。
.....
在多线程进程中未指定 sigprocmask() 函数的使用。
一开始,每个进程都有一个线程,即运行main() 的线程。 sigprocmask() 只能在单线程进程中运行。 pthread_sigmask() 可以在任意数量的线程进程中运行。
我可以在没有线程的情况下使用 pthread_sigmask 吗?
是的。
可以在没有线程的情况下调用 pthread_sigmask 还是应该在第二种情况下使用 sigprocmask?
没关系。
您标记了linux。大多数linux 使用glibc,而在glibc pthread_sigmask() 中调用相同的系统调用rt_sigprocmask 或仅调用函数sigprocmask()。所以在glibc 他们做的事情完全一样。
【讨论】: