Как передать новые сообщения в функцию потока во время выполнения? - PullRequest
1 голос
/ 11 января 2012

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

Одним из способов может быть создание глобального вектора, ипродолжайте добавлять сообщения к нему.Поток извлечет этот вектор и просканирует его на наличие новых сообщений.
Но таким образом для n потоков необходимо будет создать n векторов!
Или одну структуру со статусом threadid, message и print.

Каковы возможные практические выходы?

РЕДАКТИРОВАТЬ 1:

Является ли следующий дизайн хорошим или нуждается в некоторых улучшениях?

Будет написан следующий кодв нормальной функции, которая будет вызываться функцией main ().

  • Проверьте, существует ли уже поток (отвечающий за получение этого сообщения).

    • Если да, нажмите на сообщение в очереди этого потока, разбудите поток с помощью (pthread_cond_signal ()).
    • Если нет, создайте поток, создайте его очередь, поместите сообщение в эту очередь.
  • Когда поток завершит чтение всех сообщений в своей очереди, переведите его в режим сна (pthread_cond_wait ()).

Ответы [ 3 ]

4 голосов
/ 11 января 2012

Если у вас есть глобальная очередь, я бы использовал связанный список, а не вектор, и заблокировал бы его мьютексом, иначе вы получите условия гонки.

2 голосов
/ 11 января 2012

Google 'потребительская очередь pthreads'.Вам не нужно сканировать новые записи - производитель / производители сигнализируют потоку потребителей, что новые записи доступны.

0 голосов
/ 18 января 2012

Сделать глобальный вектор pthread-определенными данными, чтобы каждый поток имел свою собственную копию данных.Вам не нужно создавать N количество переменных.

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