Windows32 Thread API se pueden utilizar varios mecanismos de exclusión mutua de datos compartidos, 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