Как заблокировать запись в каналах, пока не произойдет чтение(в С) - PullRequest
2 голосов
/ 24 декабря 2010

В настоящее время я работаю над некоторой программой на C, и я хотел бы знать, есть ли шанс заблокировать запись в процессе записи (до тех пор, пока чтение не будет завершено)? у меня есть 3 канала между родительским процессом и дочерними процессами (родительские записи и дочерние чтения), я хотел бы позволить родителю писать только в процесс, который заканчивает чтение:)

Надеюсь, это понятно ..

Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 24 декабря 2010

bmargulies правильно. Однако альтернативой созданию более сложного протокола может быть использование нескольких потоков в родительском процессе - по одному потоку на дочерний процесс. Один поток может блокироваться из-за медленного дочернего процесса, но другие потоки могут продолжать с дочерними. В зависимости от деталей вашей проблемы это может решить ее.

0 голосов
/ 24 декабря 2010

Ядро имеет ограничение буфера для каналов, и писатели будут блокировать, если буфер заполнится.

Если вы хотите сделать это с вашими собственными границами сообщений, а не только на основе размера буфера, то вам нужно создать более сложный протокол, такой как блок считывателя в канале, идущем в другую сторону перед отправкой больше.

...