thread.h

Clase wxCriticalSection

Un objeto de sección crítica se utiliza exactamente con el mismo propósito que un wxMutex.

La única diferencia es que, en la plataforma Windows, las secciones críticas sólo son visibles dentro de un proceso, mientras que los mutex pueden compartirse entre procesos, por lo que el uso de secciones críticas es ligeramente más eficiente.

La terminología también es ligeramente diferente: un mutex puede bloquearse (o adquirirse) y desbloquearse (o liberarse), mientras que el programa entra y sale de la sección crítica.

Por último, se debe intentar utilizar la clase wxCriticalSectionLocker siempre que sea posible, en lugar de utilizar directamente wxCriticalSection, por las mismas razones por las que wxMutexLocker es preferible a wxMutex. Consultar wxMutex para ver un ejemplo.

Nota: Las secciones críticas se pueden utilizar antes de que la biblioteca wxWidgets esté completamente inicializada. En particular, es seguro crear instancias globales de wxCriticalSection.

Funciones miembro

wxCriticalSection()

wxCriticalSection::wxCriticalSection(wxCriticalSectionType critSecType = wxCRITSEC_DEFAULT)

El constructor predeterminado inicializa el objeto de sección crítica.

De forma predeterminada, las secciones críticas son recursivas en Unix y Windows.

~wxCriticalSection()

wxCriticalSection::~wxCriticalSection()

El destructor libera los recursos.

Enter()

void wxCriticalSection::Enter()

Entra en la sección crítica (igual que bloquear un mutex): si otro subproceso ya ha entrado en ella, esta llamada se bloqueará hasta que el otro subproceso llame a Leave().

Esta función no devuelve ningún error.

Después de entrar en la sección crítica que protege una variable de datos, el subproceso que se ejecuta dentro de la sección crítica puede utilizarla/modificarla de forma segura.

Hay que tener en cuenta que entrar en la misma sección crítica dos o más veces desde el mismo subproceso no da lugar a un bloqueo; en este caso, de hecho, esta función volverá inmediatamente.

Leave()

void wxCriticalSection::Leave()

Sale de la sección crítica permitiendo que otros subprocesos utilicen los datos globales protegidos por ella.

Esta función no devuelve ningún error.

TryEnter()

bool wxCriticalSection::TryEnter()

Intenta entrar en la sección crítica (lo mismo que intentar bloquear un mutex).

Si no puede, devuelve inmediatamente false.