En el entorno de Windows, ¿el mutex delimitado de Boost usa las secciones críticas de WinAPI o alguna otra cosa?¿Hay alguna diferencia entre el mutex delimitado de Boost y la sección crítica de WinAPi?
Respuesta
La versión actual de boost::mutex
no utiliza un Win32 CRITICAL_SECTION
, ni un Win32 Mutex. En cambio, usa operaciones atómicas y un evento Win32 para bloquear esperas.
Las versiones anteriores (boost 1.34.1 y anteriores) eran un contenedor alrededor de CRITICAL_SECTION
en Windows.
Por cierto, el mutex en sí no tiene un alcance. El tipo boost::mutex::scoped_lock
y, en versiones recientes, boost::lock_guard<boost::mutex>
y boost::unique_lock<boost::mutex>
proporcionan envolturas RAII para bloquear un mutex para garantizar que no se olvide de desbloquearlo.
Los boost::lock_guard<>
y boost::unique_lock<>
plantillas funcionan con cualquier tipo con lock()
y unlock()
funciones miembro, por lo que ellos pueden usar con exclusiones mutuas entre procesos si se desea.
Gracias por la respuesta. – nhaa123
¿Probablemente sea casi/tan eficiente como una sección crítica de Win32? – unixman83
@ unixman83: lo dudo, una sección crítica es rápida porque solo está en proceso, no puedes usarla entre procesos. No es un objeto kernel, pero los eventos Win32 sí lo son. Así que supongo que esto no es tan rápido como un CS. – gbjbaanb
Win32 CRITICAL_SECTION solo se puede utilizar entre los hilos de un solo proceso. Si necesita usar algo entre procesos, necesita un mutex. Boost no dice nada acerca de las secciones críticas, así que supongo que está usando mutexes.
"ámbito" solo significa que tiene un contenedor que usa RAII para desbloquear automáticamente el mutex al final de un ámbito particular.
- 1. ¿Cuál es la diferencia entre mutex y sección crítica?
- 2. semáforos, la sección crítica, mutex Ejemplos de MFC y C#
- 3. Diferencia entre "Sección crítica", "Región crítica" y "Región de ejecución limitada"
- 4. Diferencia entre bloqueos, mutex y secciones críticas
- 5. ¿Cómo hago una sección crítica con Boost?
- 6. hay ¿Hay una barrera implícita después de omp sección crítica
- 7. Sección crítica en MPI?
- 8. ¿Cuál es la diferencia entre "mutex" y "lock"?
- 9. ¿La sección crítica es siempre más rápida?
- 10. ¿Cuál es la diferencia entre HANDLE y HFILE en WinAPI?
- 11. ¿Hay alguna diferencia entre System.Windows.Clipboard y System.Windows.Forms.Clipboard?
- 12. ¿Hay alguna diferencia entre DataTable.Clear y DataTable.Rows.Clear?
- 13. ¿Hay alguna diferencia entre SSLv3 y TLS1.0?
- 14. ¿Hay alguna diferencia entre CPython y Python
- 15. ¿Hay alguna diferencia entre gluLookAt() y glFrustum()?
- 16. ¿Hay alguna diferencia entre log4net.Config.BasicConfigurator.Configure() y log4net.Config.XmlConfigurator.Configure()?
- 17. boost interprocess mutex vs boost hilo mutex
- 18. ¿Hay alguna diferencia entre MsgBox y MessageBox.Show?
- 19. ¿Hay alguna diferencia entre el archivo mapeado iostream de boost y el archivo mapeado entre procesos de impulso?
- 20. ¿Hay alguna diferencia entre .NET y ASP.NET
- 21. ¿Hay alguna diferencia entre is_int() y ctype_digit()?
- 22. ¿Hay alguna diferencia entre (local), '.' y localhost?
- 23. ¿Hay alguna diferencia entre: window.localStorage y localStorage?
- 24. ¿Hay alguna diferencia entre UITableViewCellAccessoryDetailDisclosureButton y UITableViewCellAccessoryDisclosureIndicator
- 25. ¿Hay alguna diferencia entre! == y! = En PHP?
- 26. ¿Hay alguna diferencia entre readonly y {get; }
- 27. ¿Hay alguna diferencia entre `ListView.invalidateViews()` y 'Adapter.notifyDataSetChanged()'?
- 28. Boost, concepto mutex
- 29. Reemplazar la sección crítica con bloqueo SRW
- 30. ¿Cuál es la diferencia entre GetClientRect y GetWindowRect en WinApi?
No echaste un vistazo al código fuente de Boost, ¿o sí? :) – OregonGhost
Estoy en un lugar donde no tengo acceso a él :( – nhaa123
Necesita acceso a Internet para las fuentes Stack Overflow y Boost. Http://svn.boost.org/svn/boost/trunk/ – ognian