Синхронизируйте два процесса C++ с помощью общей библиотеки

Я разрабатываю класс C++ (MyClass.cpp), который я скомпилирую как динамическую разделяемую библиотеку (MyClass.so).

Эта общая библиотека будет использоваться двумя разными приложениями, работающими на одном компьютере с Linux.

Это два разных приложения. Это не многопоточное приложение и не может им быть.

В этом классе есть метод MyClass::WriteHardware, который должен выполняться с взаимным исключением, поэтому два приложения не могут запустить его одновременно.

Каков правильный и самый простой способ добиться этой синхронизации между двумя разными процессами, учитывая, что библиотека MyClass.so является общей для обоих?

Будет ли работать мьютекс в этом случае, поскольку это не многопоточное приложение?


person jstechg    schedule 04.05.2020    source источник
comment
Какая платформа/ОС? Концепция процесса не определена в стандарте C++, поэтому то, как это сделать, зависит от платформы.   -  person PeterT    schedule 04.05.2020


Ответы (2)


Заставьте свой MyClass::WriteHardware написать «пакетный» файл с приложениями, требующими этой функции, и в правильном порядке.
После завершения задания удалите его из файла.

Функция проверяет файл, чтобы узнать, может ли он выполнить свою работу или должен дождаться завершения работы другого приложения.

Чтобы предотвратить одновременную запись нескольких приложений в этот файл, вы можете использовать другой файл блокировки. Его существование означает, что «кто-то пишет в командный файл».

person Ripi2    schedule 04.05.2020

Я рекомендую использовать аппаратные блокировки. Например, внутри вашего MyClass::WriteHardware используйте другой аппаратный объект (например, простой файл) в качестве монитора для ваших замков. Таким образом, MyClass::WriteHardware должен сначала проверить, можно ли получить файл вашего монитора с доступом для записи, а затем выполнить свои действия, все еще удерживая блокировку для этого файла монитора, а затем освободить его, как только он закончит с его основным материалом.

person Hack06    schedule 04.05.2020