Можно использовать:
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