У меня следующая проблема (проблема читателей и писателей):
Предположим, я создал 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
и т. Д.) - (я думаю, самое важное), как я могу заставить писателя всегда находиться в состоянии ожидания следующего ввода?Если я создаю два потока, один для ввода, а другой для вывода, он будет работать или, может быть, лучше для потока, который получает вход, также вызвать функцию принтера.