Actions
Bug #17506
closed
Ractor isolation broken by ThreadGroup
Description
Ractors currently share the ThreadGroup.
This doesn't seem very useful as there is no possible communication between the Threads of different Ractors.
It is also an isolation error:
ThreadGroup.attr_accessor :foo
var = Thread.current.group.foo = [:example]
Ractor.new { Thread.current.group.foo << [:oops] }.take
var # => [:example, [:oops]]
Should Ractor.new
create a new ThreadGroup
? Should ThreadGroup
not have (non-shareable) instance variables? Or should Ractor.new { Thread.current.group }.take
be nil
? See also https://bugs.ruby-lang.org/issues/17505 about nil
.
Note that Ractor
respects the ThreadGroup
's state:
Thread.current.group.enclose
Ractor.new { Thread.current.group.add(Thread.current) }.take # => can't move to the enclosed thread group
Thread.current.group.freeze
Ractor.new {} # => ThreadError (can't start a new thread (frozen ThreadGroup))
I am not sure what is the best behavior as I don't have enough experience with how ThreadGroups are used, especially enclosed ThreadGroups.
Actions
Like0
Like0Like0