Ukrainskiy
@Ukrainskiy

Как сделать ограничение на параллельное выполнение двух методов из разных процессов?

Есть 2 метода класса foo и bar, одновременно выполняется множество процессов. Метод foo может выполняться параллельно множеством процессов, метод bar должен выполняться одновременно только одним процессом если ни один процесс не выполняет foo или bar и блокировать вызов foo до окончания работы bar. Какими низкоуровневыми средствами можно задать такое поведение? В проекте используется shared memory.
  • Вопрос задан
  • 111 просмотров
Решения вопроса 1
Можно использовать:
1. Именованные семафоры - "из коробки" предназначены для вашей задачи
2. Неименованные семафоры + shared memory (на 1 и 2 есть примеры в https://stackoverflow.com/questions/8359322/how-to...)
3. Атомарные переменные в shared memory (пример в https://stackoverflow.com/questions/48614784/alloc...) + футекс (футексы есть в линукс, но использовать их можно только через системный вызов, если что-то не поменялось) - наиболее эффективный способ, т.к. системный вызов дергается только если требуется блокировка процесса, но плохо документирован, если интересен поищите реализации критической секции через футекс, вам надо примерно то же самое
4. мутексы в shared memory c PTHREAD_PROCESS_SHARED
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
vabka
@vabka
Токсичный шарпист
Ukrainskiy
@Ukrainskiy Автор вопроса
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы