I don't have any objection.

I recommend that Thread#[] should be reference to
Thread#thread_variable_get, and so on.

----

Should we add the following new methods to clarify thread local and
fiber local?

Thread#fiber_variable_get <= alias of Thread#[]
Thread#fiber_variable_set <= alias of Thread#[]=
Thread#fiber_variable?
Thread#fiber_variables


Thanks,
Koichi

(2012/10/26 7:20), tenderlovemaking (Aaron Patterson) wrote:
> 
> Issue #7097 has been updated by tenderlovemaking (Aaron Patterson).
> 
> File thread_variables.patch added
> 
> I spoke with ko1-san and Usa-san last night, and we thought that thread_variable_(get|set) would be good (similar to instance_variable_(get|set)).  I've attached an updated patch to make that change.  The documentation includes examples of how the thread local storage and fiber local storage are different.
> 
> I added two more methods:
> 
>   * Thread#thread_variables # => returns a list of the defined variable keys
>   * Thread#thread_variable? # => returns true if a key is set, otherwise false
> 
> Thread#local_variable_(get|set) methods respect the same security and frozen behavior as Thread#[] and Thread#[]=.
> 
> I think matz said it's OK to add this.  @akr, and @ko1 how is this patch?  If it's OK, I would like to apply to trunk.
> 
> Thanks! :-) 
> ----------------------------------------
> Bug #7097: Thread locals don't work inside Enumerator
> https://bugs.ruby-lang.org/issues/7097#change-31586
> 
> Author: tenderlovemaking (Aaron Patterson)
> Status: Assigned
> Priority: Normal
> Assignee: ko1 (Koichi Sasada)
> Category: 
> Target version: 
> ruby -v: ruby 2.0.0dev (2012-09-25 trunk 37032) [x86_64-darwin12.2.0]
> 
> 
> I set a thread local outside an Enumerator.  The Enumerator runs inside the same thread where I set the local.  I would expect the thread local to be available since I am in the same thread, but it is not.
> 
> Here is a test that shows the problem:
> 
> require 'minitest/autorun'
> 
> class ThreadLocalBreaks < MiniTest::Unit::TestCase
>   def test_thread_local_in_enumerator
>     Thread.current[:foo] = "bar"
> 
>     thread, value = Enumerator.new { |y|
>       y << [Thread.current, Thread.current[:foo]]
>     }.next
> 
>     assert_equal Thread.current, thread       # passes
>     assert_equal Thread.current[:foo], value  # fails
>   end
> end
> 
> 
> 


-- 
// SASADA Koichi at atdot dot net