Именовал процесс внутренних мьютексов с C / C ++? - PullRequest
0 голосов
/ 24 сентября 2011

Существуют ли способы реализации внутренних мьютексов именованных процессов с использованием C / C ++ (в Unix / Linux)?

Хитрость в том, что время жизни мьютексов должно быть постоянным процессом.В отличие, например, от именованных семафоров posix и разделяемой памяти.

Вы можете иметь, например, мьютексы pthread в динамической карте и получать к ним доступ с некоторым идентификатором.Но тогда вам нужно как-то защитить мьютексы.

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

Есть идеи?

Ответы [ 3 ]

1 голос
/ 24 сентября 2011

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

1 голос
/ 24 сентября 2011

Это довольно просто.Имейте отображение строк в мьютексы и мьютекс для защиты этого отображения:

std::map<std::string, pthread_mutex_t *> mutexMap;
pthread_mutex_t mutexMap_lock = PTHREAD_MUTEX_INITIALIZER;

Когда вам нужно найти мьютекс, сначала возьмите блокировку mutexMap_lock.Получив мьютекс, снимите блокировку и кэшируйте указатель мьютекса, чтобы вам не приходилось ссылаться на этот mutexMap пункт разногласий.

1 голос
/ 24 сентября 2011

Вы всегда можете вернуться к старым (хотя и устаревшим) семафорам System V, которые работают с общим значением ключа, а не с семафором с именем POSIX, который имеет постоянство файловой системы. При этом семафор с именем POSIX не будет иметь постоянство файловой системы, если вы закроете, а затем отсоедините семафор в каждом процессе, использующем его. После завершения последнего процесса, который использовал семафор, ссылка на семафор будет удалена из файловой системы. Если вас беспокоит видимость семафора на уровне файловой системы, вы всегда можете поставить перед именем семафора знак «.» чтобы сделать файл невидимым, и / или настроить разрешения для файла таким образом, чтобы только текущий пользователь или какой-либо привилегированный пользователь / группа могли получить доступ к семафору.

...