synchronized
import std.stdio; import core.thread; class SharedData { public int v; public void increase() { //synchronized // <== これの有無で結果が変わる { int a = v; for(int i; i<1000000; i++){} // wait v = a + 1; } } } class IncrementThread : Thread { private SharedData sd; public this(SharedData sd) { this.sd = sd; super(&f); } private void f() { sd.increase(); } } void main() { // 全部のスレッドで共有するデータ auto sd = new SharedData; // 10個のスレッドを次々に作って実行開始 Thread[] threads; for(int i; i<10; ++i) { auto t = new IncrementThread(sd); threads ~= t; t.start(); } // すべてのスレッドが終了するのを待つ foreach(t; threads) { t.join(); } // インクリメント結果を表示 writeln(sd.v); }