Руководство программиста для Linux


Атомарные (неделимые) операции с каналами


Для того чтобы операция рассматривалась как "атомарная", она не должна прерываться ни по какой причине. Неделимая операция выполняется сразу. POSIX стандарт говорит в /usr/include/posix_lim.h, что максимальные размеры буфера для атомарной операции в канале таковы: #define _POSIX_PIPE_BUF 512

Атомарно по каналу может быть получено или записано до 512 байт. Все, что выходит за эти пределы, будет разбито и не будет выполняться атомарно. Однако, под Linux-ом этот атомарный операционный лимит определен в "linux/limits.h" следующим образом: #define PIPE_BUF 4096

Как вы можете заметить, Linux предоставляет минимальное количество байт, требуемое POSIX-ом, довольно щедро. Атомарность операции с каналом становится важной, если вовлечено более одного процесса (FIFOS). Например, если количество байтов, записанных в канал, превышает лимит, отпущенный на отдельную операцию, а в канал записываются многочисленные процессы, то данные будут смешаны, т.е. один процесс может помещать данные в канал между записями других.




Начало  Назад  Вперед