Domanda

Ad esempio le c ++ 0x interfacce

Sto facendo fatica a capire quando usare quali di queste cose (cv, mutex e lock). Qualcuno può spiegare o indicare una risorsa?

Grazie in anticipo.

È stato utile?

Soluzione

Nella pagina a cui fai riferimento, " mutex " è l'attuale primitiva di sincronizzazione di basso livello. Puoi prendere un mutex e poi rilasciarlo, e solo un thread può prenderlo in qualsiasi momento (quindi è una primitiva di sincronizzazione). Un mutex ricorsivo è uno che può essere preso più volte dallo stesso thread, quindi deve essere rilasciato tante volte dallo stesso thread prima che altri lo possano prendere.

A " lock " qui c'è solo una classe wrapper C ++ che prende un mutex nel suo costruttore e lo rilascia al distruttore. È utile per stabilire la sincronizzazione per gli ambiti C ++.

Una variabile di condizione è una forma più avanzata / di alto livello di primitiva sincronizzante che combina un blocco con un " segnalazione " meccanismo. Viene utilizzato quando i thread devono attendere che una risorsa diventi disponibile. Un thread può & Quot; attendere & Quot; su un CV e quindi il produttore della risorsa può " segnalare " la variabile, nel qual caso i thread che attendono il CV vengono avvisati e possono continuare l'esecuzione. Un mutex è combinato con CV per evitare le condizioni di gara in cui un thread inizia ad attendere un CV nello stesso momento in cui un altro thread vuole segnalarlo; quindi non è controllabile se il segnale viene consegnato o si perde.

Altri suggerimenti

Non sono troppo familiare con C ++ 0x quindi prendi questa risposta con un granello di sale.

re: Mutex vs. locks: dalla documentazione che hai pubblicato, sembra che mutex sia un oggetto che rappresenta un mutex del sistema operativo, mentre un lock è un oggetto che contiene un mutex per facilitare modello RAII .

Le variabili di condizione sono un pratico meccanismo per associare un meccanismo di blocco / segnalazione (segnale + attesa) con un meccanismo di esclusione reciproca, ma mantenerle disaccoppiate nel sistema operativo in modo che tu come programmatore di sistema possa scegliere l'associazione tra condvar e mutex. (utile per gestire più insiemi di oggetti a cui si accede contemporaneamente) Rob Krten ha alcuni buone spiegazioni sui condvars in uno dei capitoli online del suo libro su QNX .

Per quanto riguarda i riferimenti generali: Questo libro (non ancora pubblicato) sembra interessante.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top