Unix Pipe несколько писателей

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

1 ответ

Решение

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

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

Другие вопросы по тегам