我面临一个关于消息队列的问题:
为了解决这个问题,我意识到它应该改为CLOCK_MONOTOIC时钟。但是在linux中,没有办法(我搜索并发现QNX支持这种机制)。
最后,我将select()和mq_timereceive与NO_WAIT结合起来。+ select():使用相对时间,因此不受系统时间变化的影响。超时之后,我将得到带有mq_timereceive()的消息队列,当然绝对时间= 0;
但是我的问题是:如果系统中有许多线程在等待相同的消息队列(通过使用select()),
发布于 2016-04-24 13:57:47
看起来你有几个问题在一个:
CLOCK_REALTIME
、CLOCK_MONOTONIC
等)选择:timerfd_create
和timer_create
。将它们与mq_timedreceive
集成的一种方法是让timer_create
触发一个中断mq_timedreceive
的信号。select
集成。最直接的方法是使用mq_notify
使其在新消息可用时传递信号,从而使select
调用返回-1
和errno
设置为EINTR
。mq_receive
中被阻塞,则可能是可能的。否则,下一个可用的消息将被传递到一个线程,该线程首先调用mq_receive
。对于同一进程的线程之间的消息传递,另一种方法可以是让管道充当消息指针的队列。也就是说,生产者线程创建一个消息并将指向它的指针写入管道中(即不需要序列化整个消息,因为消息接收方处于相同的进程中,并且可以访问进程地址空间)。任何使用者线程都可以使用select
在管道上等待,然后读取消息的指针。但是,如果多个线程正在同一个管道上等待,它们都会被唤醒,但只有一个线程会从管道中读取消息指针。
https://stackoverflow.com/questions/36821730
复制相似问题