在C中为* nix创建线程安全的定时队列

我的程序的一部分创建了某种消息.然后在第二部分处理这些消息.

我需要在程序的某些部分之间使用某种定时队列,这样可以将消息保存在内存中X秒.当此定时队列存在时,X不会更改.

理想情况下,这应该是这样的:

tqueue_t *tqueue_new(int seconds);
int tqueue_push(tqueue_t *queue, void *msg);
void *tqueue_pop(tqueue_t *queue);

当第一个消息在队列中持续X秒时,tqueue_pop()应该阻塞并返回.

做这个的最好方式是什么?也许有一些已有的解决方案?

语言:C

操作系统:* nix

此外,此队列应在线程环境中工作.

最佳答案 您应该能够在
POSIX Message Queues之上构建它,并让它处理大部分细节.就像是:

(1)用时间戳字段写入队列

(2)在你的另一个线程中阻止在mq_receive()阻止消息进入(或使用mq_notify()为你发信号或创建线程).

(3)读取队列并检查时间戳.

(4)计算等待和使用select()或某些睡眠/定时器机制的时间长度.

(5)处理消息.

点赞