Да, по-видимому с мьютексами оно так и будет работать, то есть не так как надо мне. А в случае разделяемой памяти, так там и мьютекс не нужен. Объясню пока на пальцах, код причёсывать долго)
Создаю именованную область памяти, с флагами O_CREAT|O_EXCL, получаю дескриптор. Второй экземпляр процесса пытается сделать то же самое, получает EBUSY ошибку, пишет что прога из олреди раннинг и завершается. Это всё работает, но надо докрутить до конца. Оставшийся экземпляр процесса у меня в бесконечном цикле (это типа сервер примитивный ваяю), на прерывание по контрол-це вешаю обработчик, который должен разделяемую область за собой убрать (shm_unlink()). Сейчас вот похоже я пришёл к осознанию того, что shm_unlink() не хочет ничего делать, пока не закрыт дескриптор разделяемой области (что в общем логично).
Ну, в общем, твоё сообщение я увидел в самый разгар борьбы с этим) Теперь наверно докручу без мутексов.
Спасибо!