std :: mutex è implementato con sezioni critiche, motivo per cui è molto più veloce di OS Mutex (su Windows). Tuttavia non è veloce come un CRITICAL_SECTION di Windows.Perché std :: mutex due volte più lento di CRITICAL_SECTION
Tempi solo un loop stretto in un singolo thread:
423.76ns ATL CMutex
41.74ns std::mutex
16.61ns win32 Critical Section
La mia domanda è che cosa è std :: mutex facendo? Ho guardato la fonte ma non ho potuto seguirla. Comunque ci sono stati dei passaggi extra prima che si rimettano alla Crit Sec. Le mie domande sono: questi passaggi extra sono utili? Cioè, quali sono i passaggi extra per; Cosa mi piacerebbe perdere usando CRITICAL_SECTION?
Anche perché lo chiamano Mutex se non è implementato con un Mutex?
Che tempismo? Creare un mutex, bloccarlo, sbloccarlo, ...? Per quanto riguarda le differenze dal mutex Win32: un mutex Win32 è un mutex cross-process. Lo standard richiede solo un mutex cross-thread, che può essere un costrutto più leggero (e implementa Windows con una sezione critica). –
CMutex è implementato con un mutex, non è economico. std :: mutex è costruito sopra Concurrency Runtime, è un bel pezzo di codice con funzionalità che si estendono in modo significativo oltre le primitive di schedatura e programmazione fornite dal sistema operativo. La stratificazione è pesante, non viene gratis. Se un critsect serve al tuo scopo e il sovraccarico in realtà conta solo azzeccare il problema e usarlo. –
Stavo programmando solo il blocco/sblocco. Sono solo curioso di sapere cosa std :: mutex va oltre il crit sec. Se è utile, non dovrei volerlo? Se non è utile perché lo fa? Penso che userò std :: mutex ma mi chiedo solo cosa faccia in più. – Philip