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