Se pueden utilizar varios mecanismos de exclusión mutua de datos compartidos en la API de subprocesos de Windows32 y cómo aplicarlos
Existen cuatro tipos de mecanismos de exclusión mutua de datos compartidos de Windows32 Thread API: evento, sección crítica, mutex y semáforo. Las descripciones respectivas son las siguientes:
1. Evento: es el método de sincronización entre subprocesos más flexible proporcionado por WIN32.
Uso:
Utilice CreateEvent para crear un evento. Para los eventos que deben configurarse manualmente, SetEvent y ResetEvent se utilizan para configurar el evento cuando el evento es necesario o cuando ocurre.
2. Sección crítica: evitar que varios subprocesos ejecuten un segmento de código al mismo tiempo.
Uso:
1) Cuando necesite configurar una sección crítica, primero debe definir el objeto de la sección crítica, usando CRITICAL_SECTION g_cs
2) Inicializar; la sección crítica antes del área de uso, use la función InitializeCriticalSection(&g_cs);
3) Cuando necesite ingresar a la sección crítica, use la función EnterCriticalSection(&g_cs);
4) Al salir de la sección crítica, use: LeaveCriticalSection(&g_cs); para que otros hilos puedan ingresar a la sección crítica.
5) Cuando la sección crítica ya no tiene valor de uso, es necesario destruirla mediante: DeleteCriticalSection(&g_cs);
3. se utiliza para coordinar las actividades de múltiples subprocesos o procesos, controlar el "bloqueo" y "desbloqueo" de recursos y, por lo tanto, controlar el acceso a los recursos más compartidos.
Uso:
1) Primero, cree un objeto mutex y obtenga el identificador usando la función HANDLE CreateMutex()
2) Luego, en el hilo; es posible Llame a la función WaitForSingleObject antes de que ocurra el conflicto, pase el identificador a la función y solicite ocupar el objeto mutex: dwWaitResult = WaitForSingleObject(hMutex,5000L)
3) ***El compartido; se completa el acceso a los recursos y se libera el mutex. Ocupación del objeto exclusivo: ReleaseMutex(hMutex);
4) Finalmente, use la función CloseHandle para eliminar el objeto mutex.
4. Semáforo: el objeto de señal permite que un número limitado de subprocesos accedan a recursos compartidos al mismo tiempo.
Uso:
1) Cuando se necesita un semáforo, primero llame a la función CreateSemaphore para crear un semáforo.
2) Cuando se necesita solicitar un recurso, llame a la función WaitForSingleObject O la función WaitForMultipleObject espera el semáforo.
3) Después de utilizar el recurso, llame a la función ReleaseSemaphore para liberar el semáforo