From: kosaki.motohiro@... Date: 2015-09-15T18:28:42+00:00 Subject: [ruby-dev:49259] [Ruby trunk - Bug #11496] Mutex#synchronize testing code should be data race. Issue #11496 has been updated by Motohiro KOSAKI. inserting sleep is unacceptable because sleep invokes volunteer context switch and changes a meaning and a purpose of the test. Instead, I'd like to insert a waste loop to trigger a thread preemption race. like this 100.times { m = Mutex.new r = 0 num_threads = 10 loop=100 (1..num_threads).map{ Thread.new do loop.times do m.synchronize{ tmp = r 100.times { # waste loop } r = tmp + 1 } end end }.each{|e| e.join } raise unless r == num_threads*loop } puts "pass" ---------------------------------------- Bug #11496: Mutex#synchronize testing code should be data race. https://bugs.ruby-lang.org/issues/11496#change-54199 * Author: Yuki Kurihara * Status: Open * Priority: Normal * Assignee: * ruby -v: ruby 2.3.0dev (2015-08-28 trunk 51715) [x86_64-darwin14] * Backport: 2.0.0: UNKNOWN, 2.1: UNKNOWN, 2.2: UNKNOWN ---------------------------------------- Current Mutex#synchronize testing code is not to fail every time if not use Mutex#synchronize. ~~~ruby 100.times { r = 0 max = 10 (1..max).map{ Thread.new{ i=0 while i