Taking
http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/Multithreading/ThreadSafetySummary/ThreadSafetySummary.html
as a sign, the answer appears to be:
neither of these can be safe, the latter even more so since the result is
unordered.
If one is paranoid, not even sizing the array beforehand (a very good idea) is
safe, unless someone can definitively state that no one (inc. MacRuby) will
be modifying/moving/otherwise manipulating this mutable object while you
are....
a bit of a disappointment, since a) we know resizing occurs far less
frequently then access (in general) b) making this all thread safe can easily
be done at the Framework level c) most of the time, the behavior is exactly
what we see here w.r.t. sizing (e.g. it grows UP, never down, and not up and
down ... until GC kicks in and removes it all)
-Daniel
On Sat, 22 Jan 2011 06:52:04 -0800
"Ernest N. Prabhakar, Ph.D." <prabh...@apple.com> wrote:
Hi Charles,
On Jan 21, 2011, at 9:57 PM, Charles Oliver Nutter wrote:
I'm curious about this example in Queue#apply's rdoc:
* gcdq = Dispatch::Queue.new('doc')
* @result = []
* gcdq.apply(5) {|i| @result[i] = i*i }
* p @result #=> [0, 1, 4, 9, 16, 25]
apply is said to issue the jobs in parallel, so this would be making
concurrent updates to the @result array. Are simple arrays in MacRuby
thread-safe?
My assumption was that doing a parallel assign:
result[i] = i*i
would be safe, since it always accessed a unique portion of memory, but
doing a serial append:
result << i*i
would not. But that may have been a mistake on my part, since the size (at
least) needs to be updated. Anyone know better?
-- Ernie P.
- Charlie
_______________________________________________
MacRuby-devel mailing list
MacRuby-devel@lists.macosforge.org
http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel
_______________________________________________
MacRuby-devel mailing list
MacRuby-devel@lists.macosforge.org
http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel
_______________________________________________
MacRuby-devel mailing list
MacRuby-devel@lists.macosforge.org
http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel