Различные экземпляры вашего приложения нуждаются в некотором способе общения друг с другом. Когда экземпляр запускается, он задает вопрос: «Сколько уже запущено?». Если их больше, чем разрешено n
, он решает не запускать.
Один из подходов к реализации может заключаться в том, чтобы сделать n
файлы для блокировки для n
экземпляров вашего приложения, которые вы разрешаете запускать одновременно. Затем приложение пытается получить блокировку для одного из этих файлов; если не может, то сразу выходит. Снимите блокировку, когда вы закончите, но, по-видимому, операционная система снимет блокировку для вас в случае сбоя.
Другой подход заключается в регистрации некоторой уникальной части информации для каждого процесса (PID?) В центральном местоположении (некоторая база данных) при запуске.
Еще третьим может быть использование сетевого сервера только для хоста, где либо выделенная серверная программа, либо один из экземпляров координирует связь с другими экземплярами. Если хост завершается, один из других экземпляров может саморазвититься как сервер.