Ожидание условия из нескольких ресурсов в pthread - PullRequest
0 голосов
/ 16 февраля 2010

У меня есть несколько контейнеров данных, которые могут отправлять сигнал, когда в них есть обновления. Структура выглядит примерно так:

typedef struct {
  int data;
  /*...*/
  pthread_cond_t *onHaveUpdate;
} Container;

onHaveUpdate - это указатель на глобальное условие, общее для всех контейнеров

В моем приложении есть несколько таких структур, и они могут одновременно обновляться разными потоками.

Теперь, могу ли я иметь поток, который прослушивает условие и может выполнить что-то с контейнером, который отправляет уведомление?

Я знаю, что это можно решить, используя один поток на контейнер, но это кажется пустой тратой ресурсов, но мне было интересно, можно ли это сделать, используя только один поток для всего контейнера?

1 Ответ

0 голосов
/ 16 февраля 2010

Проблема в том, что ваше состояние является общим для всех контейнеров, поэтому, когда вы отправляете условие, что что-то изменилось, вы не знаете, что изменилось . Поскольку архитектура вашего приложения не на 100% ясна из вашего контекста, почему бы не реализовать очередь, которая содержит события (и указатели на контейнеры помещаются в эту очередь), и рабочий поток, который принимает события из этой очереди ожидания и выполняет работу. Таким образом, ваша рабочая очередь должна ждать при условии, что очередь заполнена (или выполняется неагрессивно в то время как true-fashion), и таким образом вы можете полностью удалить переменную условия из вашего контейнера.

...