Реализация проблемы читателей - писателей с использованием Tcl C APi - PullRequest
0 голосов
/ 28 ноября 2018

У меня следующая проблема (проблема читателей и писателей):

Предположим, я создал Tcl_Channel, управляющий каналом stdout, то есть все, что печатается на канале stdout, проходит my_output_function это часть моего Tcl_Channel.
Теперь предположим, что я помещаю Tcl_Mutex в эту часть кода этой функции, поэтому этот код будет критическим кодом.В этом коде я копирую буфер, полученный на этом канале, в некоторую очередь буферов в моей системе, а затем разблокирую Tcl_Mutex.

Теперь я хочу отправить очередь со скопированными буферами на мои принтеры(может быть много, но пока это только одна) и печатать строки в этой очереди по очереди этими принтерами.

Эта проблема похожа на проблему читателей-писателей, которая очень распространена.
Я не очень разбираюсь в Tcl C Api, но я видел некоторые структуры Tcl C, которые, вероятно, помогут мне, например, Tcl_Condition (вместо использования cond_t) и Tcl_Notify.

Мои вопросы:

  1. Есть ли какой-нибудь хороший справочный код или веб-сайт, который, как я вижу, реализует нечто подобное?
  2. мой код только на C и C ++ (я использовал Tcl C API только для согласованности с остальной частью моего кода и потому что я перенаправил стандартный вывод, используя Tcl_Channel), поэтому лучше реализовать его с помощью CТипы / C ++ (используя его с mutex_t и cond_t и т. Д.)
  3. (я думаю, самое важное), как я могу заставить писателя всегда находиться в состоянии ожидания следующего ввода?Если я создаю два потока, один для ввода, а другой для вывода, он будет работать или, может быть, лучше для потока, который получает вход, также вызвать функцию принтера.
...