【问题标题】:Can I use pthread_sigmask without thread?我可以在没有线程的情况下使用 pthread_sigmask 吗?
【发布时间】:2020-02-03 12:35:30
【问题描述】:

我为两个使用 pthread_sigmask 的可执行文件共享了代码。其中一个可执行文件具有 pthread 线程,另一个只是一个进程。可以在没有线程的情况下调用 pthread_sigmask 还是应该在第二种情况下使用 sigprocmask?

【问题讨论】:

  • 你总是有线程。如果您“没有线程”,那么您只有一个线程。

标签: c linux pthreads


【解决方案1】:

来自posix pthread_sigmask

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 他们做的事情完全一样。

【讨论】:

    猜你喜欢
    • 2014-10-03
    • 2017-12-31
    • 2019-01-31
    • 2016-08-11
    • 2021-08-10
    • 2021-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多