Вариантов три (в posix), настраивается через pthread_mutexattr_settype()
- PTHREAD_MUTEX_NORMAL блокировка при попытке захвата - поток будет ждать, пока ресурс не освободится
- PTHREAD_MUTEX_RECURSIVE рекурсивный захват - тот же самый поток сможет повторно захватить русурс
- PTHREAD_MUTEX_ERRORCHECK вылет с ошибкой, если ресурс занят
Ну и ненужно забывать, что есть еще и семафоры, у которых есть счетчик. Например, блокировать доступ, если уже 5 потоков или процессов захватили семафор.
А , еще забыл, если процессы, то для этого есть shared memory - туда и помещать семафоры и мьютексы. С мьютексами не уверен точно, а вот семафоры туда нужно !