Implementazione Small Mutex?

1

La dimensione relativamente grande di std::mutex su piattaforme diverse (ad es. 40 o anche 80 byte) viene spesso spiegata come garanzia che i mutex non occupino le stesse linee di cache e quindi non si verifichino logicamente inutili ritardi e attività di sincronizzazione .

Tuttavia un std::mutex è comunemente incorporato in un oggetto più grande e la sua dimensione è (quasi di progettazione) un danno per la vera condivisione.

Che cos'è un buon design per un mutex minimo?

Una progettazione spin-lock a un byte è abbastanza banale ma un mutex 'vero' in cui i thread sospendono finché la notifica non è più una sfida. Non riesco a trovare un modo portabile per un thread per notificare un altro thread a unsuspend / unsleep senza ricorrere a un mutex.

    
posta Persixty 05.04.2017 - 11:01
fonte

1 risposta

3

WTF :: Lock , la libreria di lock utilizzata da WebKit suona come quello che ti serve. Il link sopra descrive il design in dettaglio.

I punti più importanti per te sono:

  • Il Mutex usa solo un byte, che è sufficiente per uno spin-lock.
  • Passa dallo spin-locking al blocco per attese più lunghe. Questo è implementato tramite code di thread che sono separate dal mutex stesso.

Non sono sicuro di quanto sia utilizzabile la libreria senza WebKit, ma i principi di progettazione descritti nel post collegato sono generalmente applicabili. Ad esempio, esiste una libreria di blocco Rust popolare con lo stesso design.

    
risposta data 05.04.2017 - 11:38
fonte

Leggi altre domande sui tag