mi chiedo perché non posso fare questo in C++ 14 (o 17)Condizione variabile e mutex condivisa
std::shared_timed_mutex mutex;
std::unique_lock<std::shared_timed_mutex> lock(mutex);
std::condition_variable var;
while(!some_condition)
var.wait(lock);
variabili di condizione sembrano solo lavorare con std :: mutex. Ma perché?
Potete condividere il vostro caso per questo? – inf
Ciò che è bello di questo è che non solo puoi aspettare un 'shared_timed_mutex' che è" write locked "come mostrato sopra, puoi anche aspettare che sia" read locked "usando' shared_lock'. Forse è necessario attendere fino a quando un thread dello scrittore aggiorna le informazioni in modo che tu possa pubblicarle. –
L'uso del caso è un po 'complesso: ho un datastore con un blocco di lettura/scrittura globale (per ora). E anche serrature per oggetto. Se acquisisco un oggetto, per prima cosa blocco il blocco globale, recupero l'oggetto, blocco dell'oggetto e rilascio del blocco globale. Ora potrebbe esserci il caso in cui un oggetto viene cancellato. Quindi non voglio aspettare il blocco degli oggetti (perché anche quel blocco verrà distrutto), ma invece ho una variabile di condizione che risveglia i thread svegli quando qualcosa cambia. Forse non è il miglior design ma è privo di deadlock e non utilizza molta memoria. –