Una domanda riguardante std::shared_mutex
e l'acquisizione di unique_lock
.Can thread che tenta di std :: lock [_unique] uno std :: shared_mutex essere affamato dai thread che chiamano std :: lock_shared?
Si supponga ci sono 3 fili:
- 2 lettori (che cercano di
lock_shared()
lastd::shared_mutex
), e - 1 scrittore (cercando di
lock[_unique]()
lastd::shared_mutex
)
E 'possibile che il lo scrittore che prova a lock[_unique]()
sarebbe morto di fame? Ad es .: in ogni momento almeno un lettore possiede uno std::shared_lock
e lock[_unique]()
non può mai avere successo.
Più o meno: sarebbe lock[_unique]()
su un std::shared_mutex
bloccare qualsiasi tentativo di ulteriore lock_shared()
esso?
(abbastanza sicuro boost::upgrade_lock
potrebbe lavorare qui, ma mi piacerebbe sapere se c'è alcuna garanzia per la nuda std::unique_lock
su un std::shared_mutex
)
Cosa intendi per 'lock [_unique]()' la funzione 'std :: lock' o' std :: unique_lock'? – inf
solo la funzione std :: shared_mutex.lock() – hauron
Quindi suppongo che sarebbe meglio rimuovere la parte univoca? – inf