El hambre y livelock
El hambre y livelock son tanto un problema menos común que el punto muerto, pero sigue habiendo problemas que cada diseñador de software concurrente es probable que encuentre.
inanición
inanición describe una situación en la que un hilo es incapaz de ganar acceso regular a los recursos compartidos y es incapaz de hacer progresos. Esto sucede cuando los recursos compartidos no están disponibles durante largos períodos por los hilos "codiciosos". Por ejemplo, supongamos que un objeto proporciona un método sincronizado que a menudo tarda mucho tiempo en regresar. Si un hilo invoca este método con frecuencia, a menudo se bloquearán otros hilos que también necesitan acceso sincronizado frecuente al mismo objeto.
livelock
Un hilo a menudo actúa en respuesta a la acción de otro hilo. Si la acción del otro subproceso también es una respuesta a la acción de otro subproceso, entonces puede producirse un bloqueo en vivo. Al igual que con el punto muerto, los hilos enclavados no pueden avanzar más. Sin embargo, los hilos no están bloqueados; simplemente están demasiado ocupados respondiendo el uno al otro para reanudar el trabajo. Esto es comparable a dos personas que intentan cruzarse en un corredor: Alphonse se mueve a su izquierda para dejar pasar a Gaston, mientras que Gaston se mueve hacia la derecha para dejar pasar a Alphonse. Al ver que todavía están bloqueándose entre sí, Alphone se mueve a su derecha, mientras que Gaston se mueve a su izquierda. Todavía se están bloqueando, así que ...
La dependencia de la tarea causa interbloqueo y no bloqueo en vivo. Tu definición de livelock es completamente incorrecta en mi opinión. – giovannim