Ruby, 39 caracteres
T=Thread;t=T.current;T.new{t.join}.join
A idéia de usar uma junção cruzada descaradamente roubada da resposta Java de Johannes Kuhn .
Podemos cortar quatro caracteres (chegando a 35 ) se ajustarmos o código para um ambiente específico. O IRB do console do JRuby é de thread único:
T=Thread;T.new{T.list[0].join}.join
Esta é a minha solução anterior:
é fácil ficar preso em um mutex:
m=Mutex.new;2.times{Thread.new{m.lock}}
mas esse não é um conflito adequado, porque tecnicamente o segundo thread não está aguardando o primeiro thread. "espera e espera" é uma condição necessária para um impasse, de acordo com a Wikipedia. O primeiro thread não espera e o segundo thread não contém nada.
Rubi, 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 é um impasse clássico. Dois threads competem por dois recursos, tentando novamente se tiverem êxito. Normalmente eles ficam presos dentro de um segundo na minha máquina.
Porém, se ter infinitos encadeamentos (nenhum dos quais consome CPU infinitamente e alguns dos quais impasse) estiver OK,
Rubi, 87 85 caracteres
m,n=Mutex.new,Mutex.new
loop{o,p=(m,n=n,m)
Thread.new{o.synchronize{p.synchronize{}}}}
De acordo com o meu teste, ele falha após a contagem de encadeamentos atingir cerca de 4700. Esperemos que não falhe até que cada encadeamento tenha a chance de ser executado (portanto, seja um deadlock ou finalizando e liberando espaço para um novo). De acordo com o meu teste, a contagem de threads não diminui após a falha, o que significa que ocorreu um conflito durante o teste. Além disso, o IRB morreu após o teste.