Справочная страница Linux для aio_write
говорит
Записываемая область буфера не должна иметь доступ во время операции или неопределенные результатыможет произойти.
Мой акцент на «доступ», который строго интерпретируется, не только сохраняет в буфере, но и загружает из буфера.
Man-страница в Mac OSX говорит:
Изменения структуры блока управления асинхронным вводом-выводом или содержимого буфера после того, как запрос был помещен в очередь, но до его завершения не допускаются.
Это звучит немного более разумно;буфер может быть прочитан, но не изменен.Последствия нарушения все еще остаются неопределенными.
Думая о том, как это может быть реализовано в ОС, я не могу понять, почему доступ на чтение когда-либо будет проблемой, и единственная проблема, которую я могу себе представитьиз одновременной записи будет то, что фактические записанные данные могут представлять собой произвольное сочетание начального содержимого буфера и одновременных хранилищ в буфере.
Однако неопределенное поведение открывает много возможностей, и с этим впомните, что мы можем получить SIGSEGV при доступе (соответствующая страница была заблокирована для предотвращения одновременного доступа?), или операции чтения могут вернуть ненужные данные (файловая система выполняет шифрование или сжатие на месте?), или файл может остаться с постоянно нечитаемыми блоками(контрольная сумма блока, затем изменяется одновременно, затем записывается?).Неопределенное поведение даже не исключает сбой прошивки устройства хранения или ОС.
Мой вопрос: что могло бы на самом деле, разумно произойти, учитывая системы и оборудование, которое у нас есть?Я предполагаю, что язык оставлен намеренно неопределенным, чтобы не ограничивать будущие реализации.