Реализация проблемы читателей - писателей с использованием Tcl C APi
У меня есть следующая проблема (проблема читателей писателей):
Предположим, я создал Tcl_Channel
который контролирует stdout
канал, то есть все, что печатается на stdout
канал проходит my_output_function
это часть моего Tcl_Channel
,
Теперь предположим, что я ставлю Tcl_Mutex
на этой части кода этой функции, так что этот код будет критическим кодом. В этом коде я копирую буфер, полученный на этом канале, в некоторую очередь буферов в моей системе, а затем разблокирую Tcl_Mutex
,
Теперь я хочу отправить очередь со скопированными буферами на мои принтеры (может быть много, но пока это только одна) и распечатать строки в этой очереди по очереди этими принтерами.
Эта проблема похожа на проблему читателей-писателей, которая очень распространена.
Я не очень разбираюсь в Tcl C Api, но я видел некоторые структуры Tcl C, которые, вероятно, помогут мне Tcl_Condition
(Вместо того, чтобы использовать cond_t
) а также Tcl_Notify
,
Мои вопросы:
- Есть ли хороший справочный код или веб-сайт, который я вижу, реализуя что-то похожее на это?
- мой код только на C и C++ (я использовал Tcl C API только для согласованности с остальной частью моего кода и потому что я перенаправил стандартный вывод, используя
Tcl_Channel
) так что лучше реализовать его, используя типы C/C++ (используя его сmutex_t
а такжеcond_t
так далее.) - (Я думаю, самое важное), как я могу заставить писателя всегда находиться в состоянии ожидания следующего ввода? Если я создам два потока, один для ввода, а другой для вывода, он будет работать или, может быть, лучше для потока, который получает вход, также вызвать функцию принтера.