Я не понимаю использование мьютекса
если он может быть рекурсивно заблокирован
нить.
Мьютекс используется для обеспечения взаимоисключающего доступа к ресурсу. Другими словами, только один поток (или «агент») должен иметь доступ к ресурсу за один раз. Поэтому, если поток получил мьютекс, он уже имеет монопольный доступ к ресурсу, поэтому нет никакого вреда, если он снова сможет использовать мьютекс.
Рекурсивный мьютекс все еще полезен, поскольку он все еще обеспечивает семантику монопольного доступа. В то время как Поток 1 может получить мьютекс, который у него уже есть, Потоку 2 по-прежнему запрещено принимать мьютекс и получать доступ к ресурсу одновременно с Потоком 1.
Почему кто-то хочет рекурсивно
заблокировать мьютекс?
Для удобства: если мой поток обращается к ресурсу в нескольких разных классах, каждый из них может получать и освобождать мьютекс независимо и вложенным образом, не беспокоясь друг о друге. Это может рассматриваться как лень или плохой дизайн, но это преимущество перед нерекурсивными мьютексами, которые вызывают тупик, когда поток пытается получить мьютекс, которым он уже владеет.