在多线程应用程序中使用sigprocmask()时,是否存在sigfault的任何众所周知的原因?

我有一个使用clone()创建多个线程的应用程序。我已经确定,由于某种原因,当我使用sigprocmask时,它会出现segfaults(尽管并非始终如此)。从backtrace()看来,当我在siglongjmp()之后使用sigprocmask()时,似乎发生了段错误。

有任何想法吗?

最佳答案

检查第二个和第三个参数。如果它们不是NULL,请确保它们每个都是sigset_t的有效指针。

请注意,sigprocmask()仅为单线程进程正式定义。多线程进程应该改用pthread_sigmask(),尽管它返回错误代码而不是errno,但它使用相同的参数。

10-05 19:50