Метод быстрой межпроцессной синхронизации

У меня есть кусок общей памяти, содержащий некоторые данные. Чтение / запись этих данных должны быть синхронизированы между различными процессами. В данный момент я использую безымянные семафоры POSIX. Так как мое главное беспокойство - скорость, я хотел бы знать, являются ли семафоры здесь оптимальными? Они заканчиваются, например, системным вызовом (userspace -> space kernel) или принудительным переключением контекста? Что ты предлагаешь?

Некоторая информация о безымянных семафорах: http://linux.die.net/man/3/sem_init

1 ответ

Решение

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

Поэтому я рекомендую использовать мьютекс pthreads (см. pthread_mutex_lock()) находится в каком-то месте в вашей части общей памяти. Это будет работать в достаточно новой системе Linux (glibc-2.3.2 или новее, ядро ​​2.6.x). С мьютексом ядро ​​будет вызываться только при конфликте (два процесса конкурируют за одну и ту же блокировку), и в этом случае проходить ядро ​​будет правильным решением.

Другие вопросы по тегам