Run a bounded worker thread, collect its return value, and report a size label for the settled result.

thread value `Thread#value` joins a worker and returns the value of its block, so reading the settled result reports the finished state without leaving a background thread running.

Thread Value Coordination Report

seed
thread_value_coordination_report.rb
Replay: real traced execution (multi-file project)
seed = 3
worker = Thread.new do
  total = 0
  seed.times do |step|
    total += step + 1
  end
  total
end

result = worker.value
finished = worker.status == false

status = if result <= 3
  "small"
elsif result <= 12
  "mid"
else
  "large"
end

puts "seed=#{seed}"
puts "finished=#{finished}"
puts "result=#{result}"
puts "status=#{status}"
seed = 1
worker = Thread.new do
  total = 0
  seed.times do |step|
    total += step + 1
  end
  total
end

result = worker.value
finished = worker.status == false

status = if result <= 3
  "small"
elsif result <= 12
  "mid"
else
  "large"
end

puts "seed=#{seed}"
puts "finished=#{finished}"
puts "result=#{result}"
puts "status=#{status}"
seed = 6
worker = Thread.new do
  total = 0
  seed.times do |step|
    total += step + 1
  end
  total
end

result = worker.value
finished = worker.status == false

status = if result <= 3
  "small"
elsif result <= 12
  "mid"
else
  "large"
end

puts "seed=#{seed}"
puts "finished=#{finished}"
puts "result=#{result}"
puts "status=#{status}"
  1. seed ← 3, worker ← ⟨Thread A /tmp/execution/⟨tmp B⟩.rb:32 run⟩

    1seed→ 3 = 3  #@seed=1, 62worker→ ⟨Thread A /tmp/execution/⟨tmp B⟩.rb:32 run⟩ = Thread.new do3  total = 04  seed.times do |step|5    total += step + 16  end7  total8end
  2. total ← 0

    1seed = 3  #@seed=1, 62worker = Thread.new do3  total→ 0 = 04  seed3.times do |step|5    total += step + 16  end7  total08end
  3. do |step|

    pass 1 of 3
    3total = 04seed.times do |step0|5  total0 += step0 + 16end
    All 3 passes — pass 1 is the card above
    passsteptotal
    100
    211
    323
  4. result ← 6, finished ← true, status ← mid

    10result→ 6 = worker.value611finished→ true = worker.statusfalse == false1213status→ mid = if result6 <= 314  "small"15elsif result6 <= 1216  "mid"17else18  "large"19end2021puts "seed=#{seed3}"22puts "finished=#{finishedtrue}"23puts "result=#{result6}"24puts "status=#{statusmid}"
    outputseed=3
    finished=true
    result=6
    status=mid
  1. seed ← 1, worker ← ⟨Thread A /tmp/execution/⟨tmp B⟩.rb:32 run⟩

    1seed→ 1 = 12worker→ ⟨Thread A /tmp/execution/⟨tmp B⟩.rb:32 run⟩ = Thread.new do3  total = 04  seed.times do |step|5    total += step + 16  end7  total8end
  2. total ← 0

    1seed = 12worker = Thread.new do3  total→ 0 = 04  seed1.times do |step|5    total += step + 16  end7  total08end
  3. do |step|

    3total = 04seed.times do |step0|5  total0 += step0 + 16end
  4. result ← 1, finished ← true, status ← small

    10result→ 1 = worker.value111finished→ true = worker.statusfalse == false1213status→ small = if result1 <= 314  "small"15elsif result1 <= 1216  "mid"17else18  "large"19end2021puts "seed=#{seed1}"22puts "finished=#{finishedtrue}"23puts "result=#{result1}"24puts "status=#{statussmall}"
    outputseed=1
    finished=true
    result=1
    status=small
  1. seed ← 6, worker ← ⟨Thread A /tmp/execution/⟨tmp B⟩.rb:32 run⟩

    1seed→ 6 = 62worker→ ⟨Thread A /tmp/execution/⟨tmp B⟩.rb:32 run⟩ = Thread.new do3  total = 04  seed.times do |step|5    total += step + 16  end7  total8end
  2. total ← 0

    1seed = 62worker = Thread.new do3  total→ 0 = 04  seed6.times do |step|5    total += step + 16  end7  total08end
  3. do |step|

    pass 1 of 6
    3total = 04seed.times do |step0|5  total0 += step0 + 16end
    All 6 passes — pass 1 is the card above
    passsteptotal
    100
    211
    323
    436
    5410
    6515
  4. result ← 21, finished ← true, status ← large

    10result→ 21 = worker.value2111finished→ true = worker.statusfalse == false1213status→ large = if result21 <= 314  "small"15elsif result21 <= 1216  "mid"17else18  "large"19end2021puts "seed=#{seed6}"22puts "finished=#{finishedtrue}"23puts "result=#{result21}"24puts "status=#{statuslarge}"
    outputseed=6
    finished=true
    result=21
    status=large