Project

General

Profile

Actions

Bug #21037

open

Ractors hang with multiple threads

Added by tenderlovemaking (Aaron Patterson) 1 day ago. Updated about 16 hours ago.

Status:
Open
Assignee:
-
Target version:
-
ruby -v:
ruby 3.5.0dev (2025-01-14T20:59:39Z master f1e32914eb) +PRISM [x86_64-linux]
[ruby-core:120671]

Description

The following program hangs, but I don't expect it to hang:

# frozen_string_literal: true

class Map
  def initialize
    @r = Ractor.new {
      cache = { "int" => "integer", "bool" => "boolean" }
      loop do
        key = receive
        Ractor.yield key
      end
    }
    freeze
  end

  def fetch(key)
    @r.send key
    m = @r.take
    raise unless key == m
    m
  end
end

tm = Map.new
t1 = Thread.new { 10.times { |i| p [i + 1,tm.fetch("int")] } }
t2 = Thread.new { 10.times { |i| p [i + 1, tm.fetch("bool")] } }

t1.join
t2.join

I'm not sure why this program hangs yet, but it does both on macOS and Linux. I've tested with master, Ruby 3.4, and Ruby 3.3. I'm not sure why it's hanging yet, but I wanted to file an issue.

Actions

Also available in: Atom PDF

Like0
Like0Like0