2009-05-18 10 views
9

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?

+0

No echaste un vistazo al código fuente de Boost, ¿o sí? :) – OregonGhost

+2

Estoy en un lugar donde no tengo acceso a él :( – nhaa123

+7

Necesita acceso a Internet para las fuentes Stack Overflow y Boost. Http://svn.boost.org/svn/boost/trunk/ – ognian

Respuesta

19

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.

+0

Gracias por la respuesta. – nhaa123

+0

¿Probablemente sea casi/tan eficiente como una sección crítica de Win32? – unixman83

+0

@ 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

1

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.

+0

Sí, esto ya lo sabía. Hmm, supongo que necesito buscar en la fuente real más adelante ... – nhaa123

+0

Si lo llaman "mutex", y no mencionan la frase "sección crítica", asuman con muy alta probabilidad que no es crítico sección –

+0

Hah, bien pensado :) – nhaa123

Cuestiones relacionadas