Существует ли кроссплатформенное решение в C ++ для создания уникального процесса? - PullRequest
3 голосов
/ 31 августа 2011

Мне нужно сделать из моей программы только один процесс на нескольких платформах.Я знал, что это может быть решено с помощью мьютекса в Windows, но я не знаю, как другие платформы, такие как Linux.Mutex не является частью стандарта C ++ 03, хотя он находится в стандарте C ++ 0x.Я должен ждать долго, прежде чем компиляторы хорошо поддержат C ++ 0x.Можно ли использовать для этого мьютекс буста?

Заранее спасибо:)

Ответы [ 3 ]

4 голосов
/ 31 августа 2011

Ни std :: mutex, ни boost :: mutex не предоставляют функциональные возможности мьютексов Win32, которые необходимы для этой работы, а именно системные глобальные именованные мьютексы, поэтому нет, вы не можете использовать ни один из них.

Самый простой и переносимый способ - это, вероятно, просто создать файл блокировки (вы можете записать в него PID, а затем проверить, существует ли еще процесс, чтобы избежать блокировки программы после аварийного завершения). Тем не менее, вам все еще может понадобиться некоторый код для конкретной платформы.

3 голосов
/ 31 августа 2011

Посмотрите на межпроцессную библиотеку Boost: http://www.boost.org/doc/libs/1_47_0/doc/html/interprocess.html
Я использовал named_mutex http://www.boost.org/doc/libs/1_47_0/doc/html/boost/interprocess/named_mutex.html, чтобы убедиться, что запущен только один экземпляр моей программы.

3 голосов
/ 31 августа 2011

Я не верю, что это можно сделать с помощью boost :: mutex, но вы, вероятно, сможете добиться желаемого эффекта с помощью библиотеки Boost Interprocess .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...