Ruby, 39 caracteres
T=Thread;t=T.current;T.new{t.join}.join
La idea de usar una unión cruzada robada descaradamente de la respuesta Java de Johannes Kuhn .
Podemos eliminar cuatro caracteres (llegando a 35 ) si ajustamos el código a un entorno específico. La consola IRB de JRuby es de un solo subproceso:
T=Thread;T.new{T.list[0].join}.join
Esta es mi solución anterior:
conseguir un hilo atascado en un mutex es fácil:
m=Mutex.new;2.times{Thread.new{m.lock}}
pero este no es un punto muerto adecuado, porque el segundo hilo técnicamente no está esperando el primer hilo. "mantener y esperar" es una condición necesaria para un punto muerto según Wikipedia. El primer hilo no espera, y el segundo hilo no contiene nada.
Rubí, 97 95 caracteres
m,n=Mutex.new,Mutex.new
2.times{o,p=(m,n=n,m)
Thread.new{loop{o.synchronize{p.synchronize{}}}}}
Este es un punto muerto clásico. Dos hilos compiten por dos recursos, reintentando si tienen éxito. Normalmente se atascan en un segundo en mi máquina.
Pero, si tiene infinidad de hilos (ninguno de los cuales consume CPU infinitamente y algunos de los cuales están en punto muerto) está bien,
Rubí, 87 85 caracteres
m,n=Mutex.new,Mutex.new
loop{o,p=(m,n=n,m)
Thread.new{o.synchronize{p.synchronize{}}}}
Según mi prueba, falla después de que el recuento de subprocesos alcanza aproximadamente 4700. Esperemos que no falle hasta que cada subproceso tenga la oportunidad de ejecutarse (por lo tanto, bloqueo o finalización y liberación de espacio para uno nuevo). Según mi prueba, el recuento de subprocesos no disminuye después de que ocurre la falla, lo que significa que se produjo un punto muerto durante la prueba. Además, IRB murió después de la prueba.