2011-09-08 4 views
5

Poiché il mutex nella maggior parte dei sistemi è implementato utilizzando le operazioni CAS, mi chiedevo il confronto delle prestazioni di questi due costrutti.chiamata mutex try-lock contro chiamate CAS

È corretto dire che se un mutex è implementato utilizzando CAS, la chiamata try-lock su quel mutex sarà la stessa/prestazione simile a confronto con le operazioni CAS?

CAS, essendo altamente dipendente dal sistema, stavo pensando se potesse essere sommariamente sostituito con la più nota/derivazione standardizzata di esso, mutex try-lock.

risposta

4

Il tuo ragionamento è valido; su qualsiasi implementazione sana, il costo di un'operazione "trylock" sarà più o meno lo stesso di un CAS. Tuttavia, CAS in generale non può essere sostituito da trylock; trylock è un primitivo più debole che non può manipolare dati arbitrari.

2

Non è corretto parlare della prestazione relativa di CAS rispetto a un lucchetto. Il sistema operativo diverso implementa i blocchi in modi molto diversi. Win32 ha bisogno di cambiare contesto nel kernel che è lento, Linux ha mutex dello spazio utente. Anche la performance varierà molto a seconda di quanto è contesa la sezione critica. Devi anche considerare cosa stai facendo nella sezione critica, stai incrementando un intero o facendo un'operazione complessa? Quindi ci sono molte variabili che entrano nel rendimento relativo e non è possibile formulare ampie affermazioni al riguardo.

Si consiglia di utilizzare la lingua/le piattaforme più facili da utilizzare per bloccare l'astrazione. Misura la performance e vedi se è accettabile per te.

+0

Win32 ha mutex spazio utente ('CriticalSection's), è solo un problema di terminologia. –