mirror of
https://github.com/mruby/mruby
synced 2026-06-08 16:11:16 +00:00
2a124a704f
added six new examples: - simple.rb: basic task creation and execution - priority.rb: priority-based scheduling - suspend_resume.rb: manual task control - inspection.rb: task status and inspection methods - statistics.rb: scheduler monitoring with Task.stat - producer_consumer.rb: task coordination pattern Co-authored-by: Claude <noreply@anthropic.com>
59 lines
1.3 KiB
Ruby
59 lines
1.3 KiB
Ruby
# Producer/Consumer Example
|
|
# Demonstrates task coordination using shared state
|
|
|
|
puts "=== Producer/Consumer Demo ==="
|
|
puts
|
|
|
|
# Shared buffer
|
|
$buffer = []
|
|
$max_items = 10
|
|
$produced = 0
|
|
|
|
# Producer task
|
|
producer = Task.new(name: "producer") do
|
|
$max_items.times do |i|
|
|
# Produce an item
|
|
item = "item-#{i}"
|
|
$buffer << item
|
|
$produced += 1
|
|
puts "Producer: created #{item} (buffer size: #{$buffer.size})"
|
|
|
|
sleep 0.3
|
|
end
|
|
puts "Producer: finished producing #{$max_items} items"
|
|
end
|
|
|
|
# Consumer task
|
|
consumer = Task.new(name: "consumer") do
|
|
consumed = 0
|
|
|
|
while consumed < $max_items
|
|
if $buffer.empty?
|
|
puts "Consumer: buffer empty, waiting..."
|
|
sleep 0.2
|
|
else
|
|
item = $buffer.shift
|
|
consumed += 1
|
|
puts "Consumer: consumed #{item} (#{consumed}/#{$max_items})"
|
|
sleep 0.5
|
|
end
|
|
end
|
|
|
|
puts "Consumer: finished consuming #{consumed} items"
|
|
end
|
|
|
|
# Monitor task
|
|
monitor = Task.new(name: "monitor") do
|
|
loop do
|
|
sleep 1
|
|
puts "Monitor: produced=#{$produced}, buffer=#{$buffer.size}, remaining=#{$max_items - $produced}"
|
|
break if $produced >= $max_items && $buffer.empty?
|
|
end
|
|
end
|
|
|
|
# Run the scheduler
|
|
Task.run
|
|
|
|
puts "\n=== All tasks completed ==="
|
|
puts "Final state: produced=#{$produced}, buffer=#{$buffer.size}"
|