2

Я знаю, что атомной обычно используется в контексте гонки условия и означает что-то вроде последовательности и детерминизма результата в соответствии с многопоточной/многопроцессорной средой. Ничего страшного. Но в последнее время я прочитал об атомных системных вызовов в Linux и не понял, что делает атомное на самом деле означает здесь, то есть как это атомарность является реализована. Означает ли это, что эта система вызывает просто блокировки на ресурсах (например, open() в целевом файле inode) или есть что-то еще, может быть, некоторые гарантии ядра? Я думаю об отключении прерываний, но не все прерывания могут быть отключены. Может быть, этого достаточно, потому что все прерывания, используемые ядром, могут быть отключены, а другие слишком важны и могут прервать наш атомный системный вызов?Что означает «атомный» системный вызов?

ответ

0

Это действительно зависит от системного вызова. Приводя man 3 read, который цитирует руководство POSIX программирования:

I/O предназначен атомарным для обычных файлов и труб и FIFOs. Атомный означает, что все байты из одной операции, которые , вместе, объединяются вместе, без чередования от других операций ввода-вывода. Известным атрибутом терминалов является то, что этот не соблюдается, а терминалы явно (и неявно постоянно) исключены, что делает поведение неуказанным. Поведение для других типов устройств также оставлено неуказанным, но формулировка предназначена для обозначения того, что будущие стандарты могут выбирать , указывая атомарность (или нет).

Очевидно, что это применимо только к операциям ввода-вывода.

+1

Я знаю об FIFO и моем вопросе о том, как эта _atomicity_ работает внутри. –

Смежные вопросы