1

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

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

我的疑问是我们是否会丢失数据,当我们在 Bookmark1 行中阻塞时,当信号处理程序在其间执行时,信号处理程序从例如计时器超时执行。

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)
}
4

0 回答 0