Red de conocimiento de abogados - Derecho de sociedades - c Problemas con subprocesos múltiples

c Problemas con subprocesos múltiples

Cuando varios subprocesos acceden a un recurso compartido exclusivo, se puede utilizar el objeto "sección crítica". Solo un subproceso puede poseer el objeto de la sección crítica en cualquier momento. El subproceso propietario de la sección crítica puede acceder a los recursos protegidos o segmentos de código. Otros subprocesos que quieran ingresar a la sección crítica serán suspendidos hasta que el subproceso propietario de la sección crítica ceda. arriba de la sección crítica, esto garantiza que varios subprocesos no accederán a recursos compartidos al mismo tiempo.

El uso de la clase CCriticalSection es muy simple. Los pasos son los siguientes:

Defina un objeto global de la clase CCriticalSection (para que todos los subprocesos puedan acceder). it), como CCriticalSection critic_section;

Antes de acceder a los recursos o al código que deben protegerse, llame al miembro Lock() de la clase CCriticalSection para obtener el objeto de la sección crítica: critic_section.Lock();

Llame a esto en la función del hilo para permitir que el hilo obtenga la sección crítica que solicitó. Si ningún otro subproceso posee el objeto de la sección crítica en este momento, el subproceso que llama a Lock() obtiene la sección crítica; de lo contrario, el subproceso se suspenderá y se colocará en una cola del sistema para esperar hasta que el subproceso que actualmente posee la sección crítica libere la sección crítica; sección.

Después de acceder a la sección crítica, use la función miembro Unlock() de CCriticalSection para liberar la sección crítica: critic_section.Unlock()

Para decirlo de manera más simple, el subproceso A se ejecuta. a la instrucción critic_section .Lock(), si otros subprocesos (B) están ejecutando critic_section.Lock(); después de la instrucción y antes de la instrucción critic_section.Unlock(); el subproceso A esperará hasta que el subproceso B termine de ejecutar critic_section. ); declaración, el hilo A continuará ejecutándose.