Una sección crítica es una sección de código que solo puede ser ejecutada por un hilo a la vez para producir los resultados esperados. Cuando se permite que varios subprocesos ejecuten este código, pueden producirse resultados impredecibles. Según esta definición, las secciones críticas son muy similares al concepto de monitores analizado en la Sección 3: Modo básico.
Un aspecto clave es que un fragmento de código debe ejecutarse solo una vez por un hilo a la vez para obtener los resultados esperados. Cuando varios subprocesos ejecutan este código, los resultados pueden ser impredecibles. Por definición, las áreas críticas son muy similares a los conceptos de monitoreo discutidos en el Capítulo 3, "Patrones básicos".
La siguiente es una lista de similitudes y diferencias entre monitores y secciones críticas: Las secciones críticas son una forma más restrictiva de monitores. ? Los monitores bloquean objetos individuales, mientras que las secciones críticas requieren bloquear clases de objetos completas.
Las similitudes y diferencias entre interceptación y sección crítica se enumeran a continuación: La sección crítica es una forma estricta de interceptación. Escuchar bloqueará un solo objeto, mientras que la sección crítica necesita bloquear una clase con un objeto completo.
En Java: – La implementación de un monitor en un método requiere declarar el método utilizando la palabra clave sincronizada. – Las secciones críticas se pueden implementar mediante el uso de una combinación de palabras clave estáticas y sincronizadas.
En Java: - El uso de monitoreo en un método requiere declarar un método usando la palabra clave sincronizada.
-Las regiones clave se pueden implementar combinando palabras clave estáticas y sincronizadas.
En el caso de un monitor, dos subprocesos no pueden ejecutar código sincronizado en el mismo objeto. Dos subprocesos pueden ejecutar el mismo código de sincronización en dos objetos diferentes. Por el contrario, en el caso de una sección crítica, dos subprocesos no pueden ejecutar código en dos objetos diferentes. Esto se debe a que el código está bloqueado en el nivel de clase, no en el nivel de objeto.
Al escuchar, no hay dos subprocesos que puedan ejecutar código sincronizado en el mismo objeto. Dos subprocesos pueden ejecutar código sincronizado en dos objetos diferentes. Por el contrario, en una sección crítica, dos subprocesos no pueden ejecutar código en dos objetos diferentes. Esto se debe a que este código está bloqueado en la clase, no en el objeto.