在多线程应用程序中使用sigprocmask()时,是否存在sigfault的任何众所周知的原因?
我有一个使用clone()创建多个线程的应用程序。我已经确定,由于某种原因,当我使用sigprocmask时,它会出现segfaults(尽管并非始终如此)。从backtrace()看来,当我在siglongjmp()之后使用sigprocmask()时,似乎发生了段错误。
有任何想法吗?
最佳答案
检查第二个和第三个参数。如果它们不是NULL,请确保它们每个都是sigset_t
的有效指针。
请注意,sigprocmask()
仅为单线程进程正式定义。多线程进程应该改用pthread_sigmask()
,尽管它返回错误代码而不是errno
,但它使用相同的参数。