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