Unix Pipe несколько писателей - PullRequest
7 голосов
/ 20 января 2011

Если есть несколько потоков, записывающих данные фиксированной длины (скажем, 4-байтовый адрес) в один канал, и существует один считыватель этого канала, гарантируется ли, что считыватель получит байты в порядке?Другими словами, является ли write() для атомной трубы?

1 Ответ

5 голосов
/ 20 января 2011

http://pubs.opengroup.org/onlinepubs/009695399/functions/write.html

Атомный / неатомный: запись является атомарной если вся сумма написана в одном операция не чередуется с данными от любого другого процесса. Это полезно когда есть несколько авторов отправка данных одному читателю. Приложения должны знать, насколько большой ожидается, что запрос на запись будет выполняется атомарно. Это максимум называется {PIPE_BUF}. Это том IEEE Стандарт 1003.1-2001 не говорит, написать запросы на более чем {PIPE_BUF} байты являются атомарными, но требует, чтобы записи {PIPE_BUF} или меньшее количество байтов должно быть атомарным.

...