调用我在信号处理程序中使用mq_send或msgsnd

时间:2018-06-18 11:29:04

标签: c linux signals message-queue posix-api

在信号处理程序中调用msgsnd()或mq_send()是否安全。代码如下所示。

有两个pthread在阻塞模式下通过消息队列发送和接收数据。在Thread2上下文中处理信号。

我怀疑的是,当我们在Bookmark1行中阻塞时,我们是否会丢失数据,因为在执行信号处理程序之间执行signal_handler,例如执行定时器超时。

Thread1
{
   while(1)
   {
        ...
        mq_send(data1)
        ...
   }
}

Thread2
{
    while(1)
    {
        ...
        mq_receive(data) // Bookmark1
        process(data) // We may start timer in this process path
        ...
    }

}
timer_timeout_signal_handler() //called from a timeout of a timer in Thread2 context.
{
    mq_send(data2)
}

0 个答案:

没有答案