[MacRuby-devel] Actor Re: [MacRuby] #597: Dispatch Queue async method inconsistent results
Ernest N. Prabhakar, Ph.D.
prabhaka at apple.com
Wed Feb 3 14:47:07 PST 2010
Hi Jordan,
On Feb 3, 2010, at 12:43 PM, Jordan K. Hubbard wrote:
> On Feb 3, 2010, at 10:13 AM, MacRuby wrote:
>
>> Using a copy of the array "sometimes" works, but I'm not quite sure how or
>> why. Still, the technical answer is that attempting to modify a dynamic
>> object inside a GCD leads to "undefined" behavior, so I'll mark this as
>> "behaves correctly". :-/
>
> I think this is going to be a perennial problem until we figure out some idiom for accessing variables from within GCD code (preferably something terse which can be easily taught, in the vein of @synchronized). Ruby programmers are just too used to having a GIL pay for their sins. :-(
Haven't you been paying attention to trunk? :-)
http://svn.macosforge.org/repository/ruby/MacRuby/trunk/lib/dispatch/dispatch.rb
# Wrap the passed +obj+ (or its instance) inside an Actor to serialize access
# and allow asynchronous invocation plus a callback
def wrap(obj)
Dispatch::Actor.new( (obj.is_a? Class) ? obj.new : obj)
end
http://svn.macosforge.org/repository/ruby/MacRuby/trunk/lib/dispatch/actor.rb
i.e.,
-----
require 'dispatch'
serialized_array = Dispatch.wrap(Array)
----
Would that do it for you?
-- Ernie P.
More information about the MacRuby-devel
mailing list