Sección crítica : cuando más de un proceso accede al mismo segmento de código, ese segmento se conoce como la sección crítica. La sección crítica contiene variables compartidas o recursos que se necesitan sincronizar para mantener la consistencia de las variables de datos. En términos simples, una sección crítica es un grupo de instrucciones/declaraciones o una región de código que debe ejecutarse atómicamente ( lea esta publicaciónatomicidad), como acceder a un recurso (archivo, puerto de entrada o salida, datos globales, etc.). En la programación concurrente, si un subproceso intenta cambiar el valor de los datos compartidos al mismo tiempo que otro subproceso intenta leer el valor (es decir, los datos corren entre subprocesos), el resultado es impredecible. El acceso a dichas variables compartidas (memoria compartida, archivos compartidos, puerto compartido, etc…) debe estar sincronizado. Pocos lenguajes de programación tienen soporte incorporado para la sincronización. Es fundamental comprender la importancia de las condiciones de carrera al escribir la programación en modo kernel (un controlador de dispositivo, un hilo de kernel, etc.). ya que el programador puede acceder y modificar directamente las estructuras de datos del kernel.
Podría visualizarse usando el pseudocódigo a continuación:
do{ flag=1; while(flag); // (entry section) // critical section if (!flag) // remainder section } while(true);
Se puede pensar en una solución simple para la sección crítica como se muestra a continuación,
acquireLock(); Process Critical Section releaseLock();
Un subproceso debe adquirir un bloqueo antes de ejecutar una sección crítica. El bloqueo puede ser adquirido por un solo hilo. Hay varias formas de implementar bloqueos en el pseudocódigo anterior. Discutámoslos en futuros artículos. Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.
Publicación traducida automáticamente
Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA