Files
Yukihiro "Matz" Matsumoto 2a124a704f mruby-task: add comprehensive examples demonstrating task features
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>
2025-10-10 17:44:31 +09:00

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}"