在信号处理程序中调用 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)
}