الصنف 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
.