Creating thread safe timed queue in C for *nix
One part of my program creates some kind of messages. These messages are then processed in the second part.
I need some kind of timed queue between p开发者_StackOverflowarts of my program that can keep messages in memory X seconds. X don't change while this timed queue exists.
Ideally this should look like this:
tqueue_t *tqueue_new(int seconds);
int tqueue_push(tqueue_t *queue, void *msg);
void *tqueue_pop(tqueue_t *queue);
tqueue_pop()
should block and return when first message was in queue for X seconds.
What is the best way to do this? Maybe there are some already existing solutions?
Language: C
OS: *nix
Also, this queue should work in threaded evironment.
You should be able to build this on top of POSIX Message Queues and let it take care of most of the details. Something like:
(1) write queue with a time stamp field
(2) In your other thread either block on mq_receive() until a message comes in (or use mq_notify() to signal or create the thread for you).
(3) Read the queue and check the time stamp.
(4) Calculate the time difference for how long you have to wait and use select() or some sleep/timer mechanism.
(5) Process the message.
精彩评论