الصنف Queue في روبي

من موسوعة حسوب
اذهب إلى: تصفح، ابحث

يُنفِّذ الصنف Queue طوابير الانتظار متعدِّدة المنتجين (multi-producer)، ومتعدِّدة المستهلكين (multi-consumer). إنَّه مفيدٌ بشكلٍ خاصٍّ في البرمجة المعتمدة على الخيوط (threaded programming) عندما يتحتَّم على المعلومات أن تُتبادل بأمان بين خيوطٍ (threads) متعدَّدة. يُنفِّذ الصنف Queue كل دلالات القفل المطلوبة.

يُنفِّذ الصنف طوابير الانتظار التي من النوع FIFO (من يدخل أولًا يخرج أولًا). في هذا النوع، المهام التي تضاف أولًا في الطابور هي المهام التي تعاد أولًا منه.
queue = Queue.new

producer = Thread.new do
  5.times do |i|
     sleep rand(i) # simulate expense
     queue << i
     puts "#{i} produced"
  end
end

consumer = Thread.new do
  5.times do |i|
     value = queue.pop
     sleep rand(i/2) # simulate expense
     puts "consumed #{value}"
  end
end

توابع الصنف العامة (Public Class Methods)

new

يُنشئ نسخةً جديدةً من الصنف Queue.

توابع النسخة العامة (Public Instance Methods)

>>

يعدُّ المعامل اسمًا بديلًا للتابع push.

clear

يحذف كل الكائنات من الطابور الذي استُدعي معه.

close

يغلق الطابور الذي استُدعي معه.

?closed

يتحقَّق إذا كان طابور الانتظار (queue) مغلقًا.

deq

يعدُّ التابع اسماً بديلًا للتابع pop.

?empty

يتحقَّق إذا كان طابور الانتظار فارغًا.

enq

يُعدُّ اسمًا بديلًا للتابع push.

length

يعيد طول الطابور الذي استُدعي معه.

num_waiting

يعيد عدد الخيوط (threads) المنتظرة في الطابور الذي استُدعي معه.

pop

يجلب بياناتٍ من الطابور الذي استُدعي معه.

push

يضيف الكائن المُمرَّر إليه إلى الطابور المعطى.

shift

يعدُّ اسمًا بديلًا للتابع pop.

size

يعدُّ اسمًا بديلًا للتابع length.

مصادر