Примечание: Я использую C++11 и хочу, чтобы он работал на любой платформе (т. е. только на чистом коде C++).
Я провел небольшое исследование и вот какой вывод:
- В мои процессы у меня есть несколько потоков. Это легко обрабатывается внутри каждого процесса с помощью мьютекса для сериализации доступа к файлу.
- Мьютекс C++/C++11 или условная переменная не может использоваться для сериализации между процессами.
- Мне нужен какой-то внешний семафор/файл блокировки, который будет действовать как «мьютекс»... но я не уверен, как это сделать.
Примечание: Каждый процесс всегда записывает одну целую строку за раз. Я думал, что этого может быть достаточно, чтобы сделать операцию «атомарной» (в том смысле, что вся строка будет буферизована перед следующей), но, похоже, это не так (если только у меня неправильный код), поскольку я (редко) получаю искажённую строку. Вот фрагмент кода того, как я пишу (если это актуально):
Код: Выделить всё
// in c'tor
m_osFile.open("test.txt", std::fstream::out | std::fstream::app)
// in write func (std::string data)
osFile
Подробнее здесь: [url]https://stackoverflow.com/questions/49381583/c-multiple-processes-writing-to-the-same-file-interprocess-mutex[/url]
Мобильная версия