Метод быстрой межпроцессной синхронизации - PullRequest
3 голосов
/ 18 февраля 2010

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

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

1 Ответ

2 голосов
/ 18 февраля 2010

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

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

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