Una región crítica es una secuencia de instrucciones que no debe ser interrumpida por otros procesos, es decir, se debe tratar una región crítica como una sola instrucción atómica.
No es suficiente que los recursos usados en una región crítica no deban ser alterados por otros procesos, porque es posible que su valor o contenido en el momento de lectura no sean validos; puede ser que estén en un estado transitorio. Sin embargo, si los accesos concurrentes solamente leen pueden estar permitidos (más sobre el tema veremos más adelante).
Normalmente se protege en los lenguajes de programación solamente el código directamente, los datos están protegidos indirectamente por su código de acceso.
Por ejemplo, en Java no se puede declarar una clase como synchronized, sino solamente sus métodos. Eso requiere mucha disciplina por parte del programador en cuanto a acceder a las variables críticas solamente con métodos adecuados.