Bird
0
0

Given two Fibers that alternate printing numbers, what is the output of this code?

hard📝 Application Q15 of 15
Ruby - Concurrent Programming
Given two Fibers that alternate printing numbers, what is the output of this code?
fiber1 = Fiber.new do
  3.times do |i|
    puts "Fiber1: #{i}"
    Fiber.yield
  end
end

fiber2 = Fiber.new do
  3.times do |i|
    puts "Fiber2: #{i}"
    Fiber.yield
  end
end

while fiber1.alive? || fiber2.alive?
  fiber1.resume if fiber1.alive?
  fiber2.resume if fiber2.alive?
end
AFiber2: 0 Fiber1: 0 Fiber2: 1 Fiber1: 1 Fiber2: 2 Fiber1: 2
BFiber1: 0 Fiber1: 1 Fiber1: 2 Fiber2: 0 Fiber2: 1 Fiber2: 2
CFiber1: 0 Fiber2: 0 Fiber1: 1 Fiber2: 1 Fiber1: 2 Fiber2: 2
DFiber1: 0 Fiber2: 0 Fiber2: 1 Fiber1: 1 Fiber1: 2 Fiber2: 2
Step-by-Step Solution
Solution:
  1. Step 1: Understand Fiber alternation

    Each Fiber prints a number then yields, pausing itself.
  2. Step 2: Trace the while loop

    The loop resumes fiber1 then fiber2 alternately while they are alive.
  3. Step 3: Follow output order

    Output alternates: Fiber1:0, Fiber2:0, Fiber1:1, Fiber2:1, Fiber1:2, Fiber2:2.
  4. Final Answer:

    Fiber1: 0 Fiber2: 0 Fiber1: 1 Fiber2: 1 Fiber1: 2 Fiber2: 2 -> Option C
  5. Quick Check:

    Fibers alternate resume and yield [OK]
Quick Trick: Fibers alternate resume and yield to interleave output [OK]
Common Mistakes:
  • Assuming one Fiber runs completely before the other
  • Mixing order of Fiber resumes
  • Forgetting Fiber.yield pauses execution

Want More Practice?

15+ quiz questions · All difficulty levels · Free

Free Signup - Practice All Questions
More Ruby Quizzes