1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00
ruby--ruby/include/ruby/internal
Koichi Sasada 2f50936cb9 Ractor.make_shareable(obj)
Introduce new method Ractor.make_shareable(obj) which tries to make
obj shareable object. Protocol is here.

(1) If obj is shareable, it is shareable.
(2) If obj is not a shareable object and if obj can be shareable
    object if it is frozen, then freeze obj. If obj has reachable
    objects (rs), do rs.each{|o| Ractor.make_shareable(o)}
    recursively (recursion is not Ruby-level, but C-level).
(3) Otherwise, raise Ractor::Error. Now T_DATA is not a shareable
    object even if the object is frozen.

If the method finished without error, given obj is marked as
a sharable object.

To allow makng a shareable frozen T_DATA object, then set
`RUBY_TYPED_FROZEN_SHAREABLE` as type->flags. On default,
this flag is not set. It means user defined T_DATA objects are
not allowed to become shareable objects when it is frozen.

You can make any object  shareable by setting FL_SHAREABLE flag,
so if you know that the T_DATA object is shareable (== thread-safe),
set this flag, at creation time for example. `Ractor` object is one
example, which is not a frozen, but a shareable object.
2020-10-21 07:59:24 +09:00
..
arithmetic
attr
compiler_is
core Ractor.make_shareable(obj) 2020-10-21 07:59:24 +09:00
has
intern
anyargs.h
arithmetic.h
assume.h
cast.h
compiler_is.h
compiler_since.h
config.h
constant_p.h
core.h
ctype.h
dllexport.h
dosish.h
error.h
eval.h
event.h
fl_type.h
gc.h
glob.h
globals.h
interpreter.h
iterator.h
memory.h
method.h
module.h
newobj.h
rgengc.h
scan_args.h
special_consts.h
static_assert.h
stdalign.h
stdbool.h
symbol.h
token_paste.h
value.h
value_type.h
variable.h
warning_push.h
xmalloc.h