HelolW rdlo (একটি থ্রেডিং চ্যালেঞ্জ)


39

আপনার কাছে আমার একটা চ্যালেঞ্জ রয়েছে:

  • যে কোনও ভাষা ব্যবহার করে "হ্যালো ওয়ার্ল্ড" মুদ্রণ করুন।
  • প্রতিটি চরিত্রকে তার নিজস্ব, অনন্য থ্রেড থেকে মুদ্রিত করতে হবে

এটাই. স্পষ্টতই, থ্রেডগুলি যেভাবে শুরু করার ক্রমে চালিত হবে তার কোনও গ্যারান্টি নেই বলে আউটপুট সঠিক ক্রমে মুদ্রিত হয়েছে তা নিশ্চিত করার জন্য আপনাকে আপনার প্রোগ্রামের থ্রেডটিকে নিরাপদ করে তুলতে হবে।

এবং, কারণ এটি কোড গল্ফ, সংক্ষিপ্ততম প্রোগ্রামটি জয়ী।

হালনাগাদ:

বিজয়ী মেরিনাসের এপিএল এন্ট্রি , 34 টি অক্ষরে। এটি স্বল্প পাঠযোগ্য প্রবেশের জন্য পুরষ্কারও জিতায়।


10
এর আরও ভাল নাম হতHelolW rdlo
ক্রিশ্চিয়ান লুপাস্কু

হা, আমি এটা পছন্দ করি।
এখনই


1
কত লোক "স্পষ্টতই তা উপেক্ষা করে তা দেখার বিষয় মজার বিষয়, কারণ থ্রেডগুলি আপনি যেভাবে শুরু করেছিলেন" সেই ইঙ্গিতটি মনে করে এবং তারা সঠিকভাবে পেয়েছে বলে মনে করেন না threads
জোয়া এবার্ট

বাস্তবে এটি সত্য যে "থ্রেডগুলি আপনি যেভাবে শুরু করেছিলেন সে অনুযায়ী চালিত হবে" এর কোনও গ্যারান্টি নেই "অনুশীলনে তারা প্রায়শই এ জাতীয় তুচ্ছ প্রোগ্রামের জন্য করবে। এই বিভ্রান্তি এড়াতে আমি এই সমস্যাটি যুক্ত করতে পারি যে প্রতিটি থ্রেড অবশ্যই 1) একটি (ছোট) এলোমেলো সংখ্যার মিলিসেকেন্ড 2) তার চার্ট আউটপুট 3) অন্য এলোমেলো (সম্ভবত দীর্ঘ) সময়ের জন্য অপেক্ষা করুন এইভাবে লোকেরা বলতে পারে যে কোডটি কয়েকবার চালিয়ে এটি কাজ করে। এবং যোগদান () সমাধানগুলি আরও খারাপ সম্পাদন করবে। এলোমেলোভাবে অপেক্ষা না করে একজন তার সফল প্রোগ্রামটি সঠিক বলে ভেবে সফল রান দ্বারা বিভ্রান্ত হতে পারে।
সিলভিট

উত্তর:


10

এপিএল (ডায়ালগ) ( 44 43 39 34)

{⍞←⍺⊣⎕DL⍵}&⌿2 11⍴'Hello World',⍳11

ব্যাখ্যা:

  • 2 11⍴'Hello World',⍳11 একটি ম্যাট্রিক্স তৈরি করে: (এইচ, 1), (ই, 2), ...
  • &⌿ অর্থ: ম্যাট্রিক্সের প্রতিটি কলামের জন্য পৃথক থ্রেড করুন:
  • থ্রেডে, এখন চরিত্রটি এবং এখন সময়
  • ⎕DL⊃⍵সেকেন্ডের জন্য অপেক্ষা
  • তারপরে, ⍞←⍺চরিত্রটি আউটপুট করে।

11
তুমি কি জান? আমি এটির জন্য আপনার শব্দটি নেব ... :)
বলস্টার

ঠিক আছে, এটি সবচেয়ে সংক্ষিপ্ত। অভিনন্দন!
থারউইন

19

সি, 61 62 অক্ষর

i;main(){write(1,"Hello World\n"+i++,1);i>13||fork()||main();}

Pthread লাইব্রেরি ফাংশনগুলির সকলের নাম loooooong রয়েছে, সুতরাং পরিবর্তে আমি প্রতিটি চরিত্রের জন্য একটি সম্পূর্ণ পৃথক প্রক্রিয়া চালিত করেছি। fork()এত খাটো।

write()পরিবর্তে এটি ব্যবহার করা প্রয়োজন putchar()কারণ স্টাডিও বাফারিংয়ের কার্যগুলি থ্রেড-নিরাপদ নয়।

সম্পাদিত : 62 টি অক্ষরে ব্যাক আপ। আমার উদ্যোগে, 61 টি অক্ষরে নেমে যাওয়া থ্রেড-সুরক্ষাও ফেলেছে।


লিখিত বিবৃতিটি write(1,"Hello World\n",!!++i)2 বাইটে পরিবর্তন করা উচিত should অন্যথায় ভাল সমাধান।
প্রিমো

আপনার এটি চেষ্টা করা উচিত এবং এটি কী উত্পাদন করে তা দেখতে হবে।
ব্রেডবক্স

আমার ভুল, আমি বোঝাতে !!++i
চাইছিলাম

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

আমি মূলত লিখেছিলাম !!i++, কিন্তু এটি কয়েক সেকেন্ড পরে সম্পাদনা করেছি, কারণ আমি বুঝতে পেরেছিলাম যে এটি 0প্রথম পুনরাবৃত্তিতে মূল্যায়ন করবে । আমি ধরে নিয়েছি আপনি অশিক্ষিত সংস্করণটি দেখেছেন। আমি আপনার কোডটি পরীক্ষা করতে পারছি না, কারণ এটি একবারে কেবল প্রথম চরিত্রটি প্রিন্ট করে । যদিও বিকল্প অনেক আছে; i++<13, ব্যবহার করে !!iবা এমনকিwrite(1,"Hello World\n",i++>13||fork()||main())
প্রিমো

9

রুবি, 46 টি অক্ষর

"Hello World".chars{|c|Thread.new{$><<c}.join}

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


7

পাইথোনেক্ট (35 টি অক্ষর)

http://www.pythonect.org

"Hello World"|list|_.split()->print

এটি এখন পর্যন্ত সংক্ষিপ্ততম। এটি আসলে কী করে আমার কোনও ধারণা নেই, তাই আমি এটি সঠিক বলে ধরে নিচ্ছি এবং কেউ যদি এর বিরুদ্ধে কথা না বলে বা আরও ছোট করে কিছু পোস্ট করে তবে একটি দু'দিনের মধ্যে এটি গ্রহণ করব।
থারউইন

1
কেবল উদাহরণগুলিতে একটি সংক্ষিপ্ত চেহারা ছিল। স্টেটমেন্ট বা তালিকার স্টেটমেন্টের চারপাশে বন্ধনী থাকা উচিত নয়?
ডালিন সেয়েভরাইট

1
হাই, আমি ইটজিকের (অজগরটির স্রষ্টা) উত্তর পাঠিয়ে দিচ্ছি: '->' এবং '|' উভয় পাইথোনেক্ট অপারেটর। পাইপ অপারেটর একটি আইটেমে একটি আইটেম পাস করে, অন্য অপারেটর সমস্ত আইটেম একবারে পাস করে। উপরের প্রোগ্রামটি যা করে তা হ'ল "হ্যালো ওয়ার্ল্ড" স্ট্রিং লাগে, এটিকে তালিকায় পরিণত করে তালিকাটি অক্ষরে ভাগ করে নিন এবং প্রতিটি চরকে মুদ্রণের জন্য প্রেরণ করুন। প্রোগ্রামটি আরও নীচের দিকে আরও অনুকূল করা সম্ভব: এটির ("হ্যালো ওয়ার্ল্ড") | এটি যা মুদ্রণ করে তা হ'ল "হ্যালো ওয়ার্ল্ড" স্ট্রিংটি পুনরাবৃত্তি করে এবং প্রতিটি অক্ষর মুদ্রণের জন্য প্রেরণ করে (একটি সিঙ্ক / ব্লকিং পদ্ধতিতে)। শুভেচ্ছা, ইতজিক কোটলার | আইকোটলেআরর্গ
লিওন

এখানে থ্রেডিং কিভাবে হচ্ছে ???
রোহিত

1
@ লিওন ফেডোটভ যেমন উল্লেখ করেছেন, এবং প্রতিটি পুনরাবৃত্তি এবং '->' অপারেটরের জন্য পার্সিংয়ের পরে পাইথোনেক্ট উত্স থেকে (পাইথোনেক্টে উপলব্ধ ) থেকে থ্রেডিং এইভাবে করা হয়: থ্রেড = থ্রেডিং ing থ্রেড (টার্গেট = __ রান, আরগস = ([( অপারেটর, আইটেম)] + অভিব্যক্তি [1:], কপিরাইট কপি (গ্লোবাল_), কপি কপি (স্থানীয়রা_), রিটার্ন_ভ্যালু_কুই, পুনরাবৃত্তি_লাইটারাল_আররে নয়)) থ্রেড.স্টার্ট ()
জোনাথন রোম

6

পাইথন ( 101 93 98)

এটিই পিটার টেলরের সমাধান। এটি এন সেকেন্ড দ্বারা N-th অক্ষর মুদ্রণ করতে বিলম্ব করে কাজ করে। মন্তব্য দেখুন।

import sys.threading as t
for x in range(11):t.Timer(x,sys.stdout.write,"Hello World"[x]).start()

এটি আসলটি:

import sys,threading as t
for x in "Hello World":t.Thread(None,sys.stdout.write,x,x).start()

এটি কাজ করেছিল কারণ একটি একক অক্ষর মুদ্রণের সময় পাইথনকে নতুন থ্রেড শুরু করতে যে সময় লাগে তার চেয়ে কম সময়, সুতরাং এন + থ্রেডটি এন + 1-থ্রেড তৈরি হওয়ার আগে শেষ হবে। স্পষ্টতই এটির উপর নির্ভর করা নিয়মের বিরুদ্ধে।


আপনি তিনটি অক্ষর পরিবর্তন import sys,threadingকরে import sys,threading as tসংরক্ষণ করতে পারেন এবং আপনি কীওয়ার্ড আর্গুমেন্টের পরিবর্তে আর্গুমেন্টকে অবস্থানগত আরোগুলি হিসাবে থ্রেডে পাস করে আরও 2 টি সঞ্চয় করতে পারেন।
জোয়েল করনেট

2
থ্রেড সুরক্ষার সাথে সম্পর্কিত কোডটি কোথায়? আপনি কেবল থ্রেড ফায়ার করে এই আশা করছেন যে তারা সেগুলি শুরু করার একই ক্রমে চালাবে। এটি সর্বদা সত্য হবে না এবং এটি আসলে এই সমস্যার "শক্ত অংশ"। আপনার প্রোগ্রামের আকারটি অনুকূল করার পরিবর্তে আপনার সমস্যার পুনর্বিবেচনা করা উচিত: আপনি এটি প্রথম স্থানে পাননি get এই কোডটি কাজ করে না এমন প্রমাণের জন্য gist.github.com/2761278 দেখুন ।
সিলভিট

দ্রুত ঠিক করা. threading.Timerপরিবর্তে ব্যবহার করুন threading.Threadxস্লিপ প্যারামিটার হিসাবে পাস ।
জোয়েল করনেট

1
জোয়েলের পরামর্শটি 4 থেকে উন্নত হতে পারেfor x in range(11):t.Timer(x,sys.stdout.write,"Hello World"[x]).start()
পিটার টেলর

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

4

সি # 73

"hello world".ToList().ForEach(c=>Task.Run(()=>Console.Write(c)).Wait());

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

তত্ত্বের ক্ষেত্রে আপনি ঠিক বলেছেন, তবে আমার পিসি থ্রেডপুল।গেটম্যাক্সথ্রেডস বা থ্রেডপুল।গেটঅ্যাভ্যালেবল থ্রেডস আইও এবং কর্মী উভয় থ্রেডের জন্য 1000 এর কাছাকাছি একটি মান প্রদান করে।
জেজেস 20'12

4

এপিএল (ডায়ালগ ইউনিকোড) , 28 বাইট এসবিসিএস

পুরো প্রোগ্রাম। Stderr প্রিন্ট। মেরিনাস এর সমাধান দ্বারা অনুপ্রাণিত ।

'Hello World'{⍞←⍺⊣⎕DL⍵}&¨⍳11

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

⍳11 প্রথম 11 পূর্ণসংখ্যা

'Hello World'{}&¨ প্রতিটি পূর্ণসংখ্যার জন্য ডান আর্গুমেন্ট ( ) হিসাবে, বাম আর্গুমেন্ট হিসাবে সম্পর্কিত অক্ষরটি সহ নিম্নলিখিত ক্রিয়াকলাপটি উত্সাহিত করেন :

⎕DL⍵d e l ay- আর্গুমেন্ট সেকেন্ড

⍺⊣ বাম-যুক্তি চরিত্রের পক্ষে যে (কার্যকর বিলম্ব) বাতিল করুন

⍞← লাইন ব্রেক বিরতি ছাড়াই প্রিন্ট করুন


কীভাবে ⍞∘←&¨'dlroW olleH'? - এটি তাত্ত্বিকভাবে গ্যারান্টিযুক্ত কিনা তা আমি জানি না তবে মনে হয় এটি সর্বদা সঠিক ক্রমে মুদ্রিত হয়
ng

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

আমি যে সীমাবদ্ধতাটি সমাধান করার চেষ্টা করছিলাম, এটির নিশ্চয়তা থাকতে পারে। আমি এটি 100 বার দৌড়েছি এবং দেখে মনে হচ্ছে থ্রেড শিডিয়ুলার সর্বদা বিপরীত ক্রমে থ্রেডগুলি তুলবে। অথবা কমপক্ষে the11 টি কার্য থাকলে সেই ক্ষেত্রে এটি ঘটে। এএফএআইকি ⍞∘←বাধাপ্রাপ্ত নয় (বা এটি? সম্ভবত আপনি কোনও সি বিকাশকারীকে জিজ্ঞাসা করতে পারেন?)। Dyalog কার্যকরী সবুজ থ্রেড - 1 বাস্তব থ্রেড অনেক হওয়ার ভান, তাই যদি একটি (সবুজ) থ্রেড সুইচ ঘটতে পারে না, অর্ডার হয় আন্দাজের।
এনজিএন

3

জাভা (160 টি অক্ষর)

class A{static int i;public static void main(String...a){new Thread(){public void run(){System.out.print("Hello World".charAt(i++));if(i<11)main();}}.start();}}

হ্যাঁ, আমি জানি কোড গল্ফের জন্য এটি ভুল ভাষা, আমি মজাদার জন্য এটি করি।


class A{public static void main(String[]args){new B(0).start();}}class B extends Thread{int i;B(int j){i=j;}public void run(){System.out.print("Hello World".charAt(i));if(i<10)new B(i+1).start();}}-197 অক্ষর
যুবরাজ জন

@ প্রিন্স ইয়েপ, সংশোধন করার জন্য ধন্যবাদ!
ম্যালকম

class A extends Thread{static int i;public static void main(String[]args){System.out.print("Hello World".charAt(i++));if(i<11)new A().start();}public void run(){main(null);}}- 174 অক্ষর
ওয়াউটার কোকেয়ার্টস

@ ওয়াটার খুব ভাল! আমি একেবারে মিস করেছি।
ম্যালকম

1
@ ম্যালকম, @ বকিল, @ ওয়াটার: class A{static int i;public static void main(String...a){new Thread(){public void run(){System.out.print("Hello World".charAt(i++));if(i<11)main();}}.start();}}- 160 টি অক্ষর
প্রিন্স জন

2

বাশ ()৪)

:(){ [ "$1" ]&&(echo -n "${1:0:1}"&: "${1:1}")};: "Hello World"

@ মারিনাস 3 টি চর দ্বারা গল্ফড হয়েছে::()([ "$1" ]&&(printf "${1:0:1}"&: "${1:1}"));: Hello\ World
ডিজিটাল ট্রমা

@ ফোসিলিট আমার জন্য লিনাক্স এবং ওএসএক্স, বেশ কয়েকটি বাশ সংস্করণে কাজ করে। শেষ এক বা দুটি অক্ষর কখনও কখনও শেল প্রম্পটের পরে মুদ্রিত হয়।
ডিজিটাল ট্রমা

2

হাস্কেল ( 120 118)

import Control.Concurrent
t=threadDelay.(*3^8)
main=(\(x,y)->forkIO$t x>>putChar y)`mapM_`zip[0..]"Hello World">>t 99

আমি 9999 দিয়ে গুণ করার বিষয়ে নিশ্চিত নই - আমার একটি 2 গিগাহার্টজ জিয়ন রয়েছে যার উপর ভিত্তি করে আপনি এটি না করলেও এটি ঠিকঠাক কাজ করবে, তবে আমার পেন্টিয়াম 4ও রয়েছে যা এটির প্রয়োজন (999 গার্ল্ড আউটপুট দিয়েছে এবং 99 করল না) কিছুতেই কিছু করবেন না।)


ব্যবহার করে 2 অক্ষর সংরক্ষণ (*5^6)পরিবর্তে (*9999)এবং জন্য backquotes ব্যবহার করছেন না mapM_
যান্ত্রিক শামুক 21

@Mechanicalsnail আপনি ব্যাকটিক মুছে ফেলেন আপনি ধনুর্বন্ধনী একটি অতিরিক্ত যুগল প্রয়োজন, অন্যথায় এটি parses যেমন (((mapM_ (\(x,y) ... )) zip) [0..]) ...না যা আপনি চান না।
মেরিনাস

হিসাবে 999, এটা অপারেটিং সিস্টেমের সীমাবদ্ধতার কারণে 0 ছেঁটে ফেলা হতে পারে পেয়ে, কিন্তু আমি ভুল হতে পারে। আপনি কোন ওএস ব্যবহার করছেন?
জোয়ে অ্যাডামস

2

স্কালা ( 81 79 টি অক্ষর)

def?(l:String){if(l.size!=0)new Thread{print(l(0));?(l.tail)}}
?("Hello World")

কিছুটা খাটো: ডিফ? (L: স্ট্রিং)) যদি (l.size> 0) নতুন থ্রেড {মুদ্রণ (l (0));? (L.tail)}}
জোয়া এবার্ট

@ জোয়াবার্ট: হ্যাঁ, দুর্দান্ত
প্রিন্স জন ওয়েসলি


1

ডি (১৩৫ টি চর)

import std.concurrency,std.stdio;
void main(){
    p("Hello World");
}
void p(string h){
    write(h[0]);
    if(h.length>1)spawn(&p,h[1..$]);
}

আমি কেবলমাত্র পরবর্তী থ্রেডটি শুরু করি যখন আমি ইতিমধ্যে বর্তমান চরটি মুদ্রণ করেছি

উন্নত বাউন্ড চেকের জন্য +2 অক্ষর সম্পাদনা করুন


আমি core.exception.RangeError@test.d(6): Range violationত্রুটি পাই
ফিশ মনিটর

@ ফসিলিট আমি এটি স্থির করে রেখেছি
ফ্রিক

1

স্কেলা 74

"Hello World".zipWithIndex.par.map(x=>{Thread.sleep(x._2*99);print(x._1)})
  • জিপউইথইনডেক্স ((এইচ, 0), (ই, 1), (এল, 2) ...) উত্পাদন করে।
  • সমান্তরাল এটি একটি সমান্তরাল সংগ্রহ করে তোলে।

পরীক্ষা:

(1 to 10).foreach {_ => "Hello World".zipWithIndex.par.map(x=>{Thread.sleep(x._2*99);print(x._1)});println()}
Hello World
Hello World
Hello World
...
Hello World

scala> "Hello World".zipWithIndex.par.foreach(x=>{Thread.sleep(x._2*99);print(x._1)}) Hel lWrolod- আমি এটি পেয়েছি
প্রিন্স জন ওয়েসলি

এছাড়াও println(Thread.currentThread.getName)দেখায় যে থ্রেড অনন্য নয়।
যুবরাজ জন ওয়েসলি

@ প্রিন্স জোন ওয়েসলি: আমি অনুমান করি যে প্রতি চিঠিতে আপনার একটি কোর প্রয়োজন, যাতে সমষ্টিটি সমস্ত কোরের উপর বিতরণ করবে।
ব্যবহারকারী অচেনা

আমি বুঝতে পেরেছি. সুতরাং প্রতি চিঠিতে একটি কোর + সিস্টেম ঘড়ির উচ্চ রেজোলিউশন প্রয়োজন।
যুবরাজ জন ওয়েসলি

mapপরিবর্তে ব্যবহার করুন foreach। আপনি 4 টি অক্ষর সংরক্ষণ করতে পারেন।
যুবরাজ জন ওয়েসলি

1

জাভাস্ক্রিপ্ট (72)

(function f(){console.log("Hello world"[i++]);i<11&&setTimeout(f)})(i=0)


1

এটি আমার এফ # প্রচেষ্টা। আমার প্রথম গুরুতর এফ # প্রোগ্রাম। দয়া করুন।

let myprint c = async {
        printfn "%c"c
}
"Hello World"|>Seq.map myprint|>Async.Parallel|>Async.RunSynchronously|>ignore


0

এরলং (90)

-module(h).
r()->r("Hello World").
r([])->'';r([H|T])->spawn(h,r,[T]),io:format("~c",[H]).

কম্পাইল erlc +export_all h.erl



0

পাইথন: অনেকগুলি অক্ষর, তবে এটি কাজ করে।

# Ok. First we patch Threading.start to test wether our solution actually works

import threading
import random, time
original_run = threading.Thread.run


def myRun(self):
    tosleep = random.randint(0,200)/1000.0
    time.sleep(tosleep)
    original_run(self)

threading.Thread.run = myRun

# And now the real code:
import time, sys, threading
string_to_write = "Hello World\n"
current_char_index = 0 # This integer represents the index of the next char to be written
# It will act as a semaphore: threads will wait until it reaches
# the index of the single char that particular thread is due to output

class Writer(threading.Thread):
    def __init__(self, char_to_write, index_to_write):
        self.char_to_write, self.index_to_write = char_to_write, index_to_write
        super(Writer, self).__init__()
    def run(self):
        ch = globals()['current_char_index']
        while not self.index_to_write == ch:
            time.sleep(0.005)
        sys.stdout.write(self.char_to_write)
        # This will be atomic because no other thread will touch it while it has "our" index
        globals()['current_char_index'] += 1

for i, char in enumerate(string_to_write):
    Writer(char, i).start()

ঘুমের সময়কে এলোমেলো করার উদ্দেশ্য কী তা আমি বুঝতে পারি না।
জোয়েল করনেট

@ জোয়েল এটি নিশ্চিত করার জন্য, যখন এটি কাজ করে, থ্রেডগুলি বহিস্কারের সাথে একই ক্রমে কার্যকর করা কোনও ভাগ্যবান কাকতালীয় ঘটনা নয়।
সিলভিট

0

সি # 90 84

foreach(var c in"Hello World"){var t=new Thread(Console.Write);t.Start(c);t.Join();}

চলমান সংস্করণ: http://ideone.com/0dXNw


কনসোল.উইরাইট খুব দ্রুত যার কারণে এটি আপনার পক্ষে কাজ করতে পারে তবে এটি অবশ্যই থ্রেড নিরাপদ নয়!
স্ট্যাটিচিপো

@ স্ট্যাটিচিপ্পো আপনি ঠিক বলেছেন; আমি ঠিক করেছিলাম।
ক্রিশ্চিয়ান লুপাস্কু

0

উদ্দেশ্য-সি (183 টি অক্ষর)

-(void) thread {[self performSelectorInBackground:@selector(printC) withObject:nil];}
-(void) printC {char *c = "Hello World"; for(int i = 0; c[i] != '\0'; i++) {printf("%c", c[i]);}}

0

হাস্কেল 99 টি চরিত্র

import Control.Concurrent
f[]=return()
f(x:xs)=(putChar x)>>(forkIO$f xs)>>f[]
main=f"Hello World"

এটি কীভাবে কাজ করে প্রতিটি থ্রেডটি তার চরিত্রটি প্রদর্শন করার পরে শুরু হয়, সুতরাং এগুলি আসলে কার্যকর জিনিসগুলি ক্রমবর্ধমান হতে পারে না।


0

বাশ , 43 বাইট

xargs -n1 printf<<<'H e l l o \  W o r l d'

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

xargsprintfপ্রতিটি চরিত্রের জন্য একটি পৃথক প্রক্রিয়া কাঁধে ফেলে (এবং এটিটি বেরিয়ে যাওয়ার জন্য অপেক্ষা করে)।

বাশ , 45 বাইট, কোনও বাহ্যিক উপযোগিতা

eval \(printf\ {H,e,l,l,o,\\\ ,W,o,r,l,d}\)\;

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

(printf H); (printf e); (printf l); (printf l); (printf o); (printf \ ); (printf W); (printf o); (printf r); (printf l); (printf d);মূল্যায়নের আগে প্রসারিত হয় । প্রথম বন্ধনীগুলি বাশ কাঁটাচামচ প্রতিটি অক্ষরের জন্য সাবস্কেল তৈরি করে (এবং এটি থেকে বেরিয়ে যাওয়ার জন্য অপেক্ষা করুন), তবে printfএবার বাশ বিল্টিন।

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