потоков с шареным доступом, которые постоянно лочат и анлочат мьютекс. И один поток с эксклюзивным. Какова гарантия того, что этот поток сможет получить доступ к ресурсу, то есть залочить мьютекс? Предположим, что в нормальном состоянии одновременно больше одного потока владеют шаренным доступом. Хоть и недолго, но когда они отдают ресурс, приходят другие потоки.
Никаких гарантий честности по умолчанию нет, кажется. Если всё время кто-нибудь держит мьютекс, то кто-то может не дождаться.
разве нет такого, что по приходу пишушего все новые читающие встают в очередь, старые читающие завершают операцию, и туда приходит ожидающий пишуший?
В рефересной имплементации оно так и есть. Но видимо стандарт сам не даёт гарантий. http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2406.html#shared_mutex_imp
Когда нибудь получит
Не обязательно
Почему? На анлоке одном из анлоков мьютекса получит
Ну банально если реализация допускает writer starvation, то куча ридеров могут никогда не отпускать shared lock
И в чем тогда прикол юзать shared mutex если он не поддерживает запись?
Обсуждают сегодня