From: "Sandor Szücs" Date: 2011-10-19T21:56:24+09:00 Subject: Re: Ruby and threading -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA512 On 10/19/11 9:11 AM, Josh Cheek wrote: > ruby-1.9.3-rc1 0.064 seconds 400000 elements in array (should be > 400000) > > rbx-2.0.0pre 0.232 seconds 398877 elements in array (should be > 400000) > > jruby-1.6.4 0.069 seconds 398709 elements in array (should be > 400000) > > macruby-0.10 0.076 seconds 366231 elements in array (should be > 400000) > > > $ cat needs_gil.rb puts '', ENV['RUBY_VERSION'] > > @array, threads = [], [] start = Time.now 4.times do threads << > Thread.new { (1..100_000).each {|n| @array << n} } end > threads.each{|t| t.join } stop = Time.now > > puts "%0.3f seconds" % (stop - start), @array.size I think it's pretty obvious, that implementations without GIL should behave exactly as you have shown. You did not use synchronization to append an item to your shared object, so sometimes items will get lost. - -- All the best, Sandor Sz�cs -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.11 (Darwin) Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/ iQIcBAEBCgAGBQJOnsjzAAoJEIiuFRwovs5rJsIP+wVWw/GRcbzLPSOCr6Ix2kWt C40qyIJ2IHjr8DqXTwEJqk3eM512L0asYTFeRKCWCxuUTQq1e52npOoESX0Ldz8W oAGKACUHyKsGMUkZqvvCMuzybPEaSzuqqpBT03TlCS/k7+ERZjMNHkmC0h50OxYI AhHDgNu4v0eeeoknYzQP5/I1Wc6f2abOArJ+8DYKf/PmPfezx51cPT/y1lFQGR+U 5/93gzEdBPe+3lY8fQn5uAYz/f98XoeEwdC1f6q+O9WRuUaEawqBJg/uBeojYY8r lLYUny3qjvgqvxlihHliChCz6SKe0WIAWjTmNzD8uRAta+9MVbxAgssBFsIKdrhS F2chYMK4urdGeT0CSVAonFr6+W1zvYll0OcWiyA5WNcQhObXEEBzCFqzfe8vS47V egllYcZa1w9SWw0dPaGJl+cz5aOqPgyRnO8QqA0sB+d0qb50+26l73UY8g4I2Mwt CLgTSsqOmymt1oVNTaQ7CIsaGYlprBPzaZ+XsM39b9HibUROYFFE1wpjZeen59SH wZFUJUEhHmchfWvfmaLx/xcVRNHdMbE7RvUt1k8UCBTTAh+vFU+LLdDYUWQXuAgZ xmPcYw+gBKiVf8iBjoQ4kS5KT9jDz6TllsyZ56KXV8LkZ2BWwssZNZrBvQCXAfqT i0LKeFvWbiElqANM+2pP =wTEh -----END PGP SIGNATURE-----