Con uno bool
è possibile implementare solo un spin-lock. Si noti che sarebbe un blocco ingiusto perché nulla garantisce che i camerieri si accodano, quindi c'è una possibilità che, in caso di alta contesa nel caso più estremo, un thread potrebbe essere bloccato per sempre perché perderebbe sempre la corsa per acquisire il blocco.
Un'implementazione mutex richiede il supporto del sistema operativo per consentire la sospensione dei thread in attesa. Quindi, un mutex necessiterebbe di un flag che indichi se è bloccato e qualche forma di un descrittore di code che consente di mettere i thread in attesa a dormire e svegliarli. Se si desidera che il mutex sia in grado di supportare il blocco ricorsivo, la robustezza, la rotazione opzionale, la protezione da inversione di priorità, ecc., Occorrerebbero ancora più membri.
fonte
2013-05-22 14:16:10
"Un mutex potrebbe essere implementato tramite un semplice' std :: atomic '" non significa che è l'implementazione ottimale. –
'atomic' è un mutex 'di un uomo povero ... Voglio dire, ** davvero ** quello di un uomo povero. –
Griwes
Mi chiedo perché alcuni considerano questa domanda poco chiara o non utile. –