রুবি, 39 টি অক্ষর
T=Thread;t=T.current;T.new{t.join}.join
জোহানেস কুহের জাভা উত্তর থেকে নির্লজ্জভাবে চুরি হওয়া ক্রস-জেন্ডার ব্যবহার করার ধারণা ।
আমরা যদি কোনও নির্দিষ্ট পরিবেশে কোডটি টিউন করি তবে আমরা চারটি অক্ষর শেভ করতে পারি ( ৩৫-তে পাওয়া )। জে আরবির কনসোল আইআরবি একক থ্রেডযুক্ত:
T=Thread;T.new{T.list[0].join}.join
এটি আমার আগের সমাধান:
একটি মিটেক্সে থ্রেড আটকে রাখা সহজ:
m=Mutex.new;2.times{Thread.new{m.lock}}
তবে এটি সঠিক অচলাবস্থা নয়, কারণ দ্বিতীয় থ্রেড প্রযুক্তিগতভাবে প্রথম থ্রেডের জন্য অপেক্ষা করছে না। "হোল্ড অ্যান্ড ওয়েট" উইকিপিডিয়া অনুসারে অচলাবস্থার জন্য প্রয়োজনীয় শর্ত। প্রথম থ্রেড অপেক্ষা করে না, এবং দ্বিতীয় থ্রেড কিছুই ধারণ করে না।
রুবি, 97 95 টি অক্ষর
m,n=Mutex.new,Mutex.new
2.times{o,p=(m,n=n,m)
Thread.new{loop{o.synchronize{p.synchronize{}}}}}
এটি একটি ক্লাসিক অচলাবস্থা। দুটি থ্রেড দুটি সংস্থার জন্য প্রতিযোগিতা করে, তারা সফল হলে পুনরায় চেষ্টা করে। সাধারণত তারা আমার মেশিনে এক সেকেন্ডের মধ্যে আটকে যায়।
তবে, যদি অসীম অনেকগুলি থ্রেড থাকে (যার মধ্যে কোনওটিই সীমাহীন সীমাহীনভাবে গ্রাস করে না এবং কিছুগুলি অচলাবস্থা) ঠিক আছে,
রুবি, 87 85 টি অক্ষর
m,n=Mutex.new,Mutex.new
loop{o,p=(m,n=n,m)
Thread.new{o.synchronize{p.synchronize{}}}}
আমার পরীক্ষা অনুসারে, থ্রেডের গণনা প্রায় 4700 পৌঁছানোর পরে এটি ব্যর্থ হয় fully আশা করি প্রতিটি থ্রেড চলার সুযোগ না পাওয়া পর্যন্ত এটি ব্যর্থ হয় না (সুতরাং এটি কোনও নতুনের জন্য ডেডলকিং বা সমাপ্তি এবং খালি জায়গা)। আমার পরীক্ষা অনুসারে, ব্যর্থতা হওয়ার পরে থ্রেডের গণনা হ্রাস পাবে না, যার অর্থ পরীক্ষার সময় একটি অচলাবস্থা ঘটেছে। এছাড়াও, আইআরবি পরীক্ষার পরে মারা যায়।