Может ли писатель канала сказать, когда читатель блокирует? - PullRequest
2 голосов
/ 07 марта 2012

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

Если это невозможно с каналом, возможно ли это с другой формой IPC?

Я подозреваю, что ответ - нет, но я все равно решил спросить.

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

1 Ответ

1 голос
/ 08 марта 2012

Насколько я знаю, не возможно напрямую (только с помощью трубы).Даже если вы знаете размер буфера канала (вы можете получить, вызвав fpathconf(pipefds[0],_PC_PIPE_BUF))), и знаете, что он пуст, все равно нет гарантии , что другой процесс фактически читает из него.Даже если он читает, он может делать это в неблокирующем режиме.Вы можете попытаться выяснить, не заблокирован ли другой процесс при каком-либо системном вызове (например, при чтении), но даже это не помогло бы (другой процесс в данный момент может читать что-то другое).что приходит мне в голову - это использование семафоров процессов.Это требует, чтобы другой (например, дочерний) процесс точно знал, какой семафор использовать и как его использовать.Вы можете проверить, заблокирован ли самафор.

...