Cuando los procesos compiten por el acceso a recursos compartidos se puede definir varios conceptos de justicia:
Los dos primeros conceptos no son muy prácticos porque dependen de términos infinitamente o el algún momento, sin embargo, pueden ser útiles en comprobaciones formales.
En un sistema distribuido la ordenación en tiempo no es tan fácil de realizar dado que la noción de tiempo no está tan clara.
Normalmente se quiere que todos los procesos manifesten algún progreso en su trabajo. Sin embargo, eso no es necesario en programas concurrentes; se puede vivir bién con algunos procesos ``muertos'', mientras no den otros problemas para el controlador (p.ej., como llenar las tablas limitadas del sistema operativo). Siempre existe la posibilidad que el trabajo asignado a un proceso sea hecho por otro proceso dejando el primero en espera infinita.