我面临一个关于消息队列的问题:
为了解决这个问题,我意识到它应该改为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
复制相似问题