POSIX позволяет внедрять мьютексы как ресурс системного уровня, но такая реализация будет считаться крайне плохим качеством, и я не могу представить, чтобы кто-нибудь использовал его.На самом деле, в современных реализациях (например, Linux) количество мьютексов, которые вы можете иметь, ограничено только виртуальным адресным пространством.(На самом деле у вас может быть даже больше, вплоть до общего размера физической памяти / раздела подкачки плюс размер файловой системы, если вы используете mmap
и munmap
для их сопоставления при необходимости.)
Что касаетсяПроизводительность: в 32-битных системах glibc разблокировка надежных мьютексов - это операция O(n)
, где n
- это количество надежных мьютексов, которые в данный момент заблокированы.Это связано с использованием односвязного списка, где нужен двусвязный список;им не хватило места в их pthread_mutex_t
структуре, чтобы соответствовать обоим указателям.Эта проблема относится только к надежным мьютексам, которые редко используются на практике, и только в 32-битных Linux / glibc.Для всех других типов мьютексов число мьютексов не влияет на производительность.Тем не менее, число мьютексов, на которые претендуют в настоящее время, оказывает некоторое влияние на производительность, но это сложный вопрос, выходящий за рамки простого ответа.