Кроссплатформенные и межпроцессные записи atomic int в файл

Я пишу приложение, которое должно быть в состоянии обрабатывать много одновременных обращений к нему, как потоками, так и процессами. Так что никакие mutex'ы или блокировки не должны применяться к этому.

Чтобы свести к минимуму использование блокировок, я планирую, чтобы файл был «только для добавления», поэтому все данные сначала добавляются на диск, а затем изменяется адрес, указывающий на информацию, которую он обновил. сослаться на новый. Поэтому мне нужно будет внедрить небольшую систему блокировок только для того, чтобы изменить этот int так, чтобы он ссылался на новый адрес. Как лучше всего это сделать?

Я думал о том, чтобы поставить флаг перед адресом, чтобы при его установке читатели использовали спин-блокировку до тех пор, пока она не будет освобождена. Но я боюсь, что это совсем не атомно, не так ли? например

читатель читает флаг, и он не установленв то же время писатель пишет флаг и изменяет значение intчитатель может прочитать противоречивое значение!

Я ищу методы блокировки, но все, что я нахожу, это либо методы блокировки потоков, либо блокирование всего файла, а не полей. Разве это невозможно сделать? Как базы данных только для добавления справляются с этим?

редактирование: я смотрел на то, как это делают только для добавления в базу данных (couchDB), и кажется, что они используют поток только для сериализации записей в файл. Означает ли это, что невозможно сделать их встраиваемыми, как sqlite, без блокировки всего файла с помощью блокировок файловой системы?

Спасибо! Cauê

Ответы на вопрос(2)

Ваш ответ на вопрос