সংক্ষিপ্ত কোড যা একটি অচলাবস্থা তৈরি করে


11

অচলাবস্থা তৈরি করতে সংক্ষিপ্ততম কোডটি লিখুন । কোড এক্সিকিউশন অবশ্যই বন্ধ করতে হবে, সুতরাং এটি কাজ করে না:

public class DeadlockFail extends Thread{ //Java code
    public static void main(String[]a){
        Thread t = new DeadlockFail();
        t.start();
        t.join();
    }
    //this part is an infinite loop; continues running the loop. 
    public void run(){while(true){}}
}

কোডটি অচলাবস্থায় চলে গেছে তা নিশ্চিত হওয়ার দরকার নেই , প্রায় অবশ্যই (যদি আপনি অসীম সময়ের জন্য চালনা করেন তবে এটি অচল হয়ে যাবে)।


যদি আমি একই থ্রেড থেকে দু'বার একই (পুনঃপ্রেরক) লকটি তালাবদ্ধ করার চেষ্টা করি তবে এটি একটি অচল হিসাবে গণ্য হবে? (দুঃখিত আমি এই প্রশ্নটি স্যান্ডবক্সে বুঝতে পারি নি)
জন ডিভোরাক

@ জনডভোরাক কী এমন পরিস্থিতি তৈরি করে যেখানে কোড এক্সিকিউশনটি থামায় কারণ একটি থ্রেড এমন কিছু পাওয়ার জন্য অপেক্ষা করছে যেটি পেতে পারে না (কারণ অন্যটি এটি ধারণ করে এবং প্রথম থ্রেডটির জন্য অপেক্ষা করছে)? নাকি এটি এক সুতো? আপনি যদি একটি থ্রেড দিয়ে এমন পরিস্থিতি তৈরি করতে পারেন তবে তা ঠিক আছে। অচলাবস্থায় উইকেপিডিয়া নিবন্ধটি পড়ুন, এটি আমি প্রত্যাশা করি।
জাস্টিন

2
Code execution must haltআমি বুঝতে পারছি না। যদি এটি বন্ধ হয়ে যায় তবে এটি অচল অবস্থা কীভাবে? আপনি কি বোঝাতে চেয়েছেন যে এটি একটি গাধার মতো স্প্লিনকিংয়ের চেয়ে কিছু অপেক্ষা করবে?
ক্রুঙ্কার

@ ক্রুনচার উদাহরণটি দেখুন যা কার্যকর হয় না। কোড কার্যকর করা বন্ধ হয় না কারণ লুপটি চলতে থাকে। হ্যাঁ আমার অর্থ স্পিনিংয়ের চেয়ে অপেক্ষা করা।
জাস্টিন

সুতরাং আপনি যদি ডায়ালগ এপিএলে নিজের জন্য ইউআই থ্রেডটি অপেক্ষা করতে পারেন তবে এর মানে কি জাভাস্ক্রিপ্টের উত্তর পাওয়ার কিছু আশা আছে? যদিও আমি সন্দেহ করি যে এই ধরণের চিন্তাভাবনা কেবল এই উত্তরের দ্বার উন্মুক্ত করবে: জাভাস্ক্রিপ্ট "" অপেক্ষা () "... এরম্মম্ম। কোন। সম্পর্কিত: কোনও থ্রেডটি নিজেই ডেডলক করা সম্ভব?
নাথান কুপার

উত্তর:


11

ডায়ালগ এপিএল (10)

⎕TSYNC⎕TID

⎕TSYNCপ্রদত্ত থ্রেডটি শেষ হওয়া পর্যন্ত থ্রেডটিকে অপেক্ষা করে তোলে, ⎕TIDবর্তমান থ্রেড দেয়।

ডায়ালগ এপিএল যদিও ডেডলকগুলি চিনতে পারে তাই এটি সাথে সাথে প্রতিক্রিয়া জানায়

DEADLOCK

মজার বিষয় হ'ল, আপনার এমনকি কোনও অতিরিক্ত থ্রেডও তৈরি করতে হবে না, ইউআই থ্রেডটি নিজের জন্য অপেক্ষা করা যথেষ্ট।

যদি এটি প্রতারণামূলক হয় এবং নতুন থ্রেডগুলি আসলে প্রয়োজনীয় হয় তবে আপনি এটি 27 টি অক্ষরে করতে পারেন:

{∇⎕TSYNC&{⎕TSYNC⎕TID+1}&0}0

F & xFমান অনুসারে একটি নতুন থ্রেডে চলে এবং xথ্রেড আইডি দেয়। তাই:

  • {⎕TSYNC⎕TID+1}&0 এমন একটি থ্রেড তৈরি করে যা থ্রেডের সাথে সিঙ্ক্রোনাইজ হবে যার আইডি এর থেকে তার চেয়ে বেশি উচ্চতর,
  • ⎕TSYNC& পূর্ববর্তী থ্রেডের সাথে সিঙ্ক্রোনাইজ হবে এমন একটি নতুন থ্রেড তৈরি করে এবং যা সদ্য তৈরি হওয়া থ্রেডের চেয়ে বেশি একটি আইডি পেয়েছে (ধরে নিই যে থ্রেড তৈরি করছে তা অন্য কিছু নয়)।
  • অসীম লুপ তৈরি করে (তাই আমরা অচলাবস্থার আগ পর্যন্ত থ্রেড তৈরি করতে থাকি)।

প্রথম থ্রেডটি শুরু হওয়ার আগেই দ্বিতীয় থ্রেডটি তৈরি হওয়ার সাথে সাথেই এটি অচল হয়ে যাবে, যা খুব শীঘ্রই:

9:DEADLOCK

এর সাথে 2 বাইট সংরক্ষণ করুন: ⎕TSYNC 0'. `TID` হয় 0
অ্যাডম

8

যাও, 42

package main
func main(){<-make(chan int)}

এটি কীভাবে কাজ করে তা সরবরাহ না করার জন্য দুঃখিত, ডাউনভোটার v এটি অন্তর্নিহিত একটি চ্যানেল তৈরি করে এবং এটি থেকে পড়ে। চ্যানেলটি কোনও মান না নামানো পর্যন্ত এটি মূল থ্রেডকে বিরতি দেয়, যা স্পষ্টতই কখনই ঘটে না যেহেতু অন্য কোনও থ্রেড সক্রিয় নেই এবং এইভাবে অচলাবস্থা রয়েছে।


2
এটা কিভাবে কাজ করে?
জাস্টিন

4

রুবি, 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 আশা করি প্রতিটি থ্রেড চলার সুযোগ না পাওয়া পর্যন্ত এটি ব্যর্থ হয় না (সুতরাং এটি কোনও নতুনের জন্য ডেডলকিং বা সমাপ্তি এবং খালি জায়গা)। আমার পরীক্ষা অনুসারে, ব্যর্থতা হওয়ার পরে থ্রেডের গণনা হ্রাস পাবে না, যার অর্থ পরীক্ষার সময় একটি অচলাবস্থা ঘটেছে। এছাড়াও, আইআরবি পরীক্ষার পরে মারা যায়।


আপনার অতিরিক্ত opভেরিয়েবলের প্রয়োজন কেন ? আপনি শুধু পাস করা যাবে না mএবং nনতুন থ্রেড জন্য?
জোহানেস কুহ্ন

@ জোহনেসকুহান mএবং nবিশ্বব্যাপী। উভয় থ্রেড এগুলিকে একই ক্রমে দেখে। oএবং pথ্রেড-লোকাল (লুপ পুনরাবৃত্তির জন্য স্কোপযুক্ত) হয়। ব্যবহার করা t[...]সম্ভবত ব্যয়বহুল হবে, এবং আমি বন্ধের মাধ্যমে থ্রেডে প্যারামিটারগুলি উত্তোলনের আর কোনও ভাল উপায় দেখতে পাচ্ছি না। newদুটি চর দ্বারা কোড দীর্ঘায়িত করতে অতিরিক্ত পরামিতি যুক্ত করা ।
জন ডিভোরাক

@ জোহানেসকুহন আশা করি আপনার আপত্তি মনে হবে না আমি আপনার কিছু যুক্তি ধার করে নিয়েছি
জন ডিভোরাক

আমি কিছু মনে করি না। ভাল করেছ.
জোহানেস কুহান

যদি আমরা ধরে নিই যে আমরা মূল থ্রেডে T=Thread;T.new{T.main.join}.join
রয়েছি তবে

4

পাইথন, 46

import threading as t
t.Semaphore(0).acquire()

(স্ব-অচলাবস্থা)


1
from threading import* Semaphore(0).acquire()আমি মনে করি এক বাইট দ্বারা সংক্ষিপ্ত
রোমান গ্রাফ

@ রোমান হ্যাঁ, এটি সংক্ষিপ্ত এবং এটি কার্যকর। tio.run/##K6gsycjPM/r/…
mbomb007

4

বাশ + জিএনইউ কোর্টিলস, 11 বাইট

mkfifo x;<x

xবর্তমান ডিরেক্টরিতে একটি বিপথগামী FIFO তৈরি করে (যাতে আপনার কাছে সেই নামে কোনও ফাইল থাকা দরকার না)। FIFO গুলি নিয়মিত ফাইলগুলির মতোই মুছতে পারে, তাই এটি পরিষ্কার করা শক্ত হওয়া উচিত নয়।

একটি ফিফোর একটি লেখার দিক এবং একটি পড়ার দিক রয়েছে; অন্য প্রক্রিয়াটি অন্যটি না খোলার আগে পর্যন্ত একটি ব্লক খোলার চেষ্টা করা হচ্ছে এবং এটি ইচ্ছাকৃতভাবে একটি সিঙ্ক্রোনাইজেশন আদিম হিসাবে ডিজাইন করা হয়েছে বলে মনে হয়। এখানে কেবল একটি থ্রেড দেওয়া আছে, এটির সাথে এটি খোলার চেষ্টা করার সাথে সাথে <xআমরা আটকে যাই। (আপনি অন্য একটি প্রক্রিয়া থেকে প্রশ্নে ফিফোর কাছে লেখার মাধ্যমে অচলাবস্থাটি আনস্টিক করতে পারেন))

যখন দুটি সংস্থান থাকে এবং এটি দুটি থ্রেডের একটিতে থাকে এবং অন্যটির প্রয়োজন হয় তখন এটির থেকে এটি আলাদা ধরণের ডেডলক হয়; পরিবর্তে, এই ক্ষেত্রে, শূন্য সংস্থান আছে এবং প্রক্রিয়াটির একটি প্রয়োজন। অন্যান্য উত্তরের উপর ভিত্তি করে, আমি মনে করি এটি গণনা করা হয়েছে তবে আমি বুঝতে পারি যে কোনও অচল পিউরিস্ট কীভাবে উত্তরটি অস্বীকার করতে চাইতে পারে।

এটি ভাবতে আসুন, আমি আসলে তিনটি অচলাবস্থার মতো পরিস্থিতি সম্পর্কে ভাবতে পারি:

  1. "Traditionalতিহ্যবাহী" অচলাবস্থা: দুটি থ্রেড প্রতিটি লক প্রকাশের জন্য অপেক্ষা করছে, এটি অন্য থ্রেডের হাতে রয়েছে।

  2. একটি একক থ্রেড লকটি প্রকাশের অপেক্ষায় রয়েছে তবে এটি লকটি নিজেই ধারণ করে (এবং এটি এটি প্রকাশ করতে সক্ষম হতে নিজেকে আটকাচ্ছে)।

  3. একটি একক থ্রেড একটি সিঙ্ক্রোনাইজেশন আদিম প্রকাশের জন্য অপেক্ষা করছে, তবে সিঙ্ক্রোনাইজেশন আদিম প্রাকৃতিকভাবে লক অবস্থায় শুরু হয় এবং এটি বাহ্যিকভাবে আনলক করতে হবে, এবং এটি করার জন্য কিছুই প্রোগ্রাম করা হয়নি।

এটি টাইপ 3 এর অচলাবস্থা, যা অন্য দুটি থেকে একরকম মৌলিকভাবে পৃথক: আপনি তাত্ত্বিকভাবে, প্রশ্নটিতে সিঙ্ক্রোনাইজেশন আদিমকে আনলক করতে একটি প্রোগ্রাম লিখতে পারেন, তারপরে এটি চালাতে পারেন। তাই বলা হয়, একই ধরনের 1 এবং 2 এর ডেডলক প্রযোজ্য, প্রদত্ত যে অনেক ভাষায় আপনি যদি একটি লক আপনার মালিকানাধীন নয় মুক্তি (আপনি করছেন না অনুমতি দেয় অনুমিত এবং যদি আপনি একটি কারণ ছিল তা করার কোনো কারণ থাকবে লকগুলি প্রথমে ব্যবহার করুন, তবে এটি কার্যকর হয় ...)। এছাড়াও, এটি যেমন একটি প্রোগ্রাম বিবেচনা মূল্যmkfifo x;<x;echo test>x; প্রোগ্রামটির ধরণটি টাইপ 2 টাইডলকের বিপরীতে থাকে (এটি ফিফোর উভয় প্রান্তটি খোলার চেষ্টা করা হয়, তবে এটি অন্য প্রান্তটি খোলা না হওয়া পর্যন্ত এটি একটি প্রান্তটি খুলতে পারে না), তবে এটি যুক্ত করে অতিরিক্ত যুক্ত করার মাধ্যমে তৈরি করা হয়েছিল কোড যে এই এক পরে চলে না! আমার ধারণা সমস্যাটি হ'ল লকটি অচল অবস্থায় রয়েছে কিনা বা লকটি ব্যবহারের পিছনের উদ্দেশ্যটির উপর নির্ভর করে না , সুতরাং উদ্দেশ্যমূলকভাবে এটি নির্দিষ্ট করা কঠিন (বিশেষত এরকম ক্ষেত্রে যেখানে লকের একমাত্র উদ্দেশ্য ইচ্ছাকৃতভাবে একটি অচলাবস্থা তৈরি করা )।



2

গ্লিবসি, 6 বাইট সহ বাশ

পুরানো থ্রেডটি পুনরুদ্ধার করার জন্য দুঃখিত, তবে প্রতিরোধ করতে পারেনি।

মূল হিসাবে:

pldd 1

ম্যান পিএলডিডি থেকে :

বাগ
জন্য glibc 2.19 সাল থেকে, pldd নষ্ট হয়ে গেছে: এটা শুধু হ্যাং যখন মৃত্যুদন্ড কার্যকর। এটি কখনও স্থির করা হবে কিনা তা অস্পষ্ট।


পুরানো পদক্ষেপে উত্তর দেওয়ার ক্ষেত্রে কোনও সমস্যা নেই যতক্ষণ না মূল সময় সংবেদনশীল না ছিল।
অ্যাডহক গার্ফ হান্টার

2

জাভা, 191

class B extends Thread{public static void main(String[]a)throws Exception{new B().join();}Thread d;B(){d=Thread.currentThread();start();}public void run(){try{d.join();}catch(Exception e){}}}

Ungolfed:

class B extends Thread {
    Thread d;
    public static void main(String[] args) throws Exception {
        new B().join();
    }
    B() { // constructor
        d = Thread.currentThread();
        start();
    }
    public void run() {
        try {
            d.join();
        } catch (Exception e) {
        }
    }
}

নতুন থ্রেড শুরু হয় এবং joinএটিতে (এই থ্রেডটি শেষ না হওয়া পর্যন্ত অপেক্ষা করুন), যখন নতুন থ্রেডটি মূল থ্রেডের সাথে একই রকম হয়।


আপনি কি এর Errorপরিবর্তে ছুড়ে ফেলে এবং ধরে আরও ছোট করে তুলতে পারেন Exception?
mbomb007

নাঃ। Thread.join()একটি নিক্ষেপ করে InteruptedException, যা একটি সাবক্লাস নয় Error
জোহানেস কুহান

2

Tcl, 76

package r Thread;thread::send [thread::create] "thread::send [thread::id] a"

অচলাবস্থা।

এটি একটি নতুন থ্রেড তৈরি করে এবং অন্য থ্রেডকে আমার থ্রেডকে একটি বার্তা প্রেরণ করতে বলে (চালানোর জন্য স্ক্রিপ্ট)।

তবে স্ক্রিপ্টটি কার্যকর না হওয়া পর্যন্ত অন্য একটি থ্রেডে একটি বার্তা প্রেরণ সাধারণত অবরুদ্ধ হয়। এবং এটি ব্লক করার সময়, কোনও বার্তা প্রক্রিয়াকরণ হয় না, সুতরাং উভয় থ্রেড তাদের বার্তাগুলি প্রক্রিয়া করার জন্য অপরের অপেক্ষা করে।


কিভাবে কাজ করে?
জন ডিভোরাক

thread::sendঅন্য কোনও থ্রেডে চালিত হওয়া উচিত এমন একটি স্ক্রিপ্ট সারি করে এবং এটি সম্পূর্ণ হওয়ার জন্য অপেক্ষা করে। সুতরাং শেষে আমাদের থ্রেড 1 থ্রেড 2 এর অপেক্ষায় রয়েছে, এবং থ্রেড 2 থ্রেডের জন্য অপেক্ষা করছে 1
জোহানেস কুহান

1

মনিটর-অপব্যবহারের সাথে বিকল্প জাভা (248 চারা)

class A{public static void main(String args[]) throws Exception{final String a="",b="";new Thread(new Runnable(){public void run(){try {synchronized(b){b.wait();}} catch (Exception e) {}a.notify();}}).start();synchronized(a){a.wait();}b.notify();}}

1

স্কালা, 104 বাইট

class A{s=>lazy val x={val t=new Thread{override def run{s.synchronized{}}};t.start;t.join;1}};new A().x

কোনও শর্ত পূরণ না হওয়া অবধি অলস ভ্যাল ইনিশিয়ালাইজেশন ব্লক স্থগিত করে। এই শর্তটি কেবল অলস ভল এক্স এর মান পড়ার মাধ্যমেই পূরণ করা যায় - এই শর্তটি সম্পূর্ণ করার কথা বলে অন্য থ্রেড এটি করতে পারে না। সুতরাং, একটি বিজ্ঞপ্তি নির্ভরতা গঠিত হয়, এবং অলস ভাল ভাল আরম্ভ করা যায় না।


কিভাবে কাজ করে?
অ্যাডিসন ক্রম্প

আমি একটি ব্যাখ্যা যুক্ত করেছি।
মার্টিন সেলার 13

1

কোটলিন, 35/37/55 বাইট

সাধারণ থিম: Thread.currentThread().join()

এই জমা দেওয়ার বিরুদ্ধে জেভিএম বাগগুলি / খুব বিশেষ কোডগুলি বাদ দিয়ে এই জোরে আর ফিরে আসবে না কারণ বর্তমান সম্পাদন থ্রেডটি এখন নিজের মৃত্যুর জন্য অপেক্ষা করতে অক্ষম হয়ে গেছে।


দুষ্ট সম্পত্তি: 35 বাইট (প্রতিদ্বন্দ্বী): 35 বাইট

val a=Thread.currentThread().join()

সম্পত্তি ঘোষণা ঘোষণার ক্ষেত্রে বৈধ যে কোনও স্থানে রাখলে যে কেউ এর সূচনা করছে তা অচল করে দেবে। কোনও শীর্ষ-স্তরের সম্পত্তির ক্ষেত্রে, সেই শ্রেণিবদ্ধারই সেই ফাইলটির জন্য ম্যাপযুক্ত জেভিএম ক্লাস শুরু করতে হবে (ডিফল্টরূপে [file name]Kt.class)।

প্রতিযোগিতামূলক না হওয়ায় "এটিকে যে কোনও জায়গায় শীর্ষ স্তরের সম্পত্তি হিসাবে রাখুন" সীমাবদ্ধ।


ফাংশন: 37 বাইট

fun a()=Thread.currentThread().join()


প্রধান (): 55 বাইট

fun main(a:Array<String>)=Thread.currentThread().join()


1

পাওয়ারশেল, 36 28 23 বাইট

gps|%{$_.waitforexit()}

স্ব-অচলাবস্থা। আমরা এর সাথে সমস্ত প্রক্রিয়া Get-Processপেয়েছি এবং তারপরে তাদের প্রতিটি প্রস্থান করার জন্য ধৈর্য ধরে অপেক্ষা করি ... যা প্রায়শই কখনও ঘটবে না, যেহেতু প্রক্রিয়াটি নিজেই অপেক্ষা করবে।

সম্পাদনা করুন - রোমান গ্রাফকে 5 টি বাইট সংরক্ষণ করা হয়েছে


(gps)|%{$_.waitforexit()}তিন বাইট ছোট এবং সমস্ত প্রসেস প্রস্থান করার জন্য অপেক্ষা।
রোমান গ্রাফ

@ রোমানগ্রাফ সত্যই, তবে gpsসেই ক্ষেত্রে চারপাশে প্যারেনের দরকার নেই , সুতরাং মোট 5 বাইট সংরক্ষণ করা হয়েছে।
অ্যাডমবর্কবার্ক

0

সি (কেবল লিনাক্স), 31 বাইট - এটি অনলাইনে চেষ্টা করুন!

main(a){syscall(240,&a,0,a,0);}

সিস্টেম কল 240 (0xf0) হল ফিউটেক্স (2) , বা দ্রুত ইউজারস্পেস মুউটেক্স। ডকুমেন্টেশনে বলা হয়েছে যে প্রথম আর্গুমেন্টটি ফুটেক্সের জন্য একটি পয়েন্টার, দ্বিতীয় যুক্তিটি অপারেশন (0 এর অর্থ FUTEX_WAIT, অর্থাৎ, অন্য থ্রেড ফুটেক্স আনলক না হওয়া পর্যন্ত অপেক্ষা করুন)। তৃতীয় আর্গুমেন্টটি হ'ল লক থাকাকালীন আপনি ফিউটেক্সের যে মূল্যটি প্রত্যাশা করেছেন তা এবং চতুর্থটি সময়সীমাটির পয়েন্টার (কোনও সময়সীমা ছাড়াই NULL)।

স্পষ্টতই, যেহেতু ফিউটেক্স আনলক করার জন্য অন্য কোনও থ্রেড নেই, তাই এটি স্ব-ক্ষতিযুক্ত অচলাবস্থায় চিরকাল অপেক্ষা করবে। এটি যাচাই করা যেতে পারে (মাধ্যমে topবা অন্য টাস্ক ম্যানেজারের মাধ্যমে ) যে প্রক্রিয়াটি কোনও সিপিইউ সময় ব্যবহার করে না, যেমন আমাদের একটি অচল থ্রেড থেকে আশা করা উচিত।


0

জুলিয়া 0.6 , 13 বাইট

প্রশ্নের চেয়ে ভাষা আরও নতুন। কোনও কাজের জন্য অপেক্ষা করুন (গো-রুটিনের মতো, বর্তমানে একই থ্রেডে থাকবে, জুলিয়ার ভবিষ্যতের সংস্করণগুলিতে এটি অন্য থ্রেডে থাকতে পারে) যা চালানোর সময় নির্ধারিত নয়।

wait(@task +)

এটি অনলাইন চেষ্টা করুন!


0

বোটেনজাইন, 3x3 = 9 (9 বাইট)

v
lCv
> <

পদক্ষেপ 5 শেষ হয় দুটি বট একে অপরের জন্য অপরিবর্তিতভাবে অপেক্ষার জন্য অপেক্ষায় চলে যায় ... একটি বট চলাচল করতে পারে না কারণ এটি অপরটির নীচের ডান চৌকোটি থেকে সরে যাওয়ার অপেক্ষায় থাকে এবং অন্য বটটি চলতে পারে না কারণ এটি অপেক্ষা করছে নীচের কেন্দ্র বর্গক্ষেত্র থেকে সরানো প্রথম বট।


0

জলপ্রপাতের মডেল (রেটিওফাল), 13 বাইট

[[2,1],[1,1]]

এটি অনলাইন চেষ্টা করুন!

দেওয়ালের বাইরে একটি মজার উত্তর। এই জলপ্রপাতের মডেলের সহজতম অসীম লুপ (যখন জলবায়ু মডেলটিতে পরিবর্তনগুলি বারবার হ্রাস হয় যখনই কিছুই হয় না; এই প্রোগ্রামটি একটি ভেরিয়েবলকে সংজ্ঞায়িত করে যা যখনই হ্রাস পায় তখন নিজেকে বাড়িয়ে তোলে, তাই কোনও কিছুর ঘটনা ঘটতে পারে না)।

প্রশ্নটি একটি অবিরাম লুপ নয়, একটি অচলাবস্থার জন্য জিজ্ঞাসা করে। তবে, আমরা নির্দিষ্ট প্রয়োগের আচরণটি কাজে লাগাতে পারি it অপ্টিমাইজেশন স্তর 2 বা ততোধিক স্তরে (ডিফল্টটি হ'ল 3), দোভাষী রেশিওফাল অসীম লুপটি সনাক্ত করবে এবং এটি অনুকূলিত করবে ... একটি অচলাবস্থায়! অন্তত যদি আমরা ভাষাগুলি তাদের প্রয়োগের দ্বারা সংজ্ঞায়িত হিসাবে বিবেচনা করি (যা সাধারণত এই সাইটের ক্ষেত্রে হয়) তবে এই প্রোগ্রামটি অসীম লুপের পরিবর্তে একটি অচলত সংজ্ঞা দেয়।

অনলাইনে চেষ্টা করে দেখুন এর সময় প্রতিবেদন থেকে অচলাবস্থার প্রমাণ আপনি দেখতে পাচ্ছেন! উপরে লিঙ্ক:

Real time: 60.004 s
User time: 0.006 s
Sys. time: 0.003 s
CPU share: 0.01 %
Exit code: 124

প্রোগ্রামটি 60 সেকেন্ড ধরে চলেছিল (টিআইও স্বয়ংক্রিয়ভাবে এটি শেষ না হওয়া অবধি), তবে বেশিরভাগ সময়, কোনও সিপিইউ ব্যবহার ছিল না, প্রোগ্রামটি চালিয়ে কোনও সময় ব্যয় করা হয়নি, এবং প্রোগ্রামের পক্ষে কার্নেল দ্বারা কোনও সময় ব্যয় করা হয়নি।

আরও দৃ evidence় প্রমাণ পেতে, আপনি সিস্টেম-কল-স্তরের ডিবাগার যেমন রেশিওফাল চালাতে পারেন strace; লিনাক্সে এটি করার ফলে ব্যাবহারকারীকে এমন একটি futexসিস্টেম কলে ব্লক করা দেখাবে যা কোনও লক নেওয়ার চেষ্টা করে যা কখনই প্রকাশিত হবে না।


আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.