Метод быстрой межпроцессной синхронизации
У меня есть кусок общей памяти, содержащий некоторые данные. Чтение / запись этих данных должны быть синхронизированы между различными процессами. В данный момент я использую безымянные семафоры 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). С мьютексом ядро будет вызываться только при конфликте (два процесса конкурируют за одну и ту же блокировку), и в этом случае проходить ядро будет правильным решением.