diff options
author | Koichi Sasada <ko1@atdot.net> | 2021-10-22 18:22:00 +0900 |
---|---|---|
committer | Koichi Sasada <ko1@atdot.net> | 2021-10-23 01:32:55 +0900 |
commit | df9fac5ccd905d57251ffa89f28959c1b2a294eb (patch) | |
tree | a2f8f3ef6a158c4658bfc572ae028cd7dcd01cfc /doc | |
parent | a7776077be7b1754b4306f00694a8f4d42009159 (diff) |
update doc/ractor.md about ivars
Notes
Notes:
Merged: https://github.com/ruby/ruby/pull/5006
Diffstat (limited to 'doc')
-rw-r--r-- | doc/ractor.md | 39 |
1 files changed, 30 insertions, 9 deletions
diff --git a/doc/ractor.md b/doc/ractor.md index dd1d44e098..5264a76861 100644 --- a/doc/ractor.md +++ b/doc/ractor.md @@ -565,27 +565,48 @@ Note that some special global variables are ractor-local, like `$stdin`, `$stdou ### Instance variables of shareable objects -Only the main Ractor can access instance variables of shareable objects. +Instance variables of classes/modules can be get from non-main Ractors if the referring values are shareable objects. ```ruby class C - @iv = 'str' + @iv = 1 end -r = Ractor.new do +p Ractor.new do class C - p @iv + @iv end -end +end.take #=> 1 +``` +Otherwise, only the main Ractor can access instance variables of shareable objects. -begin - r.take -rescue => e - e.class #=> Ractor::IsolationError +```ruby +class C + @iv = [] # unshareable object end + +Ractor.new do + class C + begin + p @iv + rescue Ractor::IsolationError + p $!.message + #=> "can not get unshareable values from instance variables of classes/modules from non-main Ractors" + end + + begin + @iv = 42 + rescue Ractor::IsolationError + p $!.message + #=> "can not set instance variables of classes/modules by non-main Ractors" + end + end +end.take ``` + + ```ruby shared = Ractor.new{} shared.instance_variable_set(:@iv, 'str') |