Создание поточно-ориентированной временной очереди в C для * nix - PullRequest
4 голосов
/ 18 января 2011

Одна часть моей программы создает какие-то сообщения. Эти сообщения затем обрабатываются во второй части.

Мне нужна какая-то временная очередь между частями моей программы, которая может хранить сообщения в памяти X секунд. X не изменяется, пока существует эта временная очередь.

В идеале это должно выглядеть так:

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

tqueue_pop() должен блокироваться и возвращаться, когда первое сообщение находилось в очереди в течение X секунд.

Каков наилучший способ сделать это? Может быть, есть какие-то уже существующие решения?

Язык: C

ОС: * nix

Также эта очередь должна работать в многопоточной среде.

1 Ответ

2 голосов
/ 18 января 2011

Вы должны иметь возможность построить это поверх POSIX Message Queues и позволить ему позаботиться о большинстве деталей. Что-то вроде:

(1) запись очереди с полем отметки времени

(2) В вашем другом потоке либо блокируйте mq_receive () , пока не придет сообщение (или используйте mq_notify () , чтобы подать сигнал или создать поток для вас).

(3) Прочитайте очередь и проверьте отметку времени.

(4) Рассчитайте разницу во времени для того, как долго вы должны ждать, и используйте select () или какой-нибудь механизм сна / таймера.

(5) Обработать сообщение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...