module pind.samples.ja.concurrency_shared.concurrency_shared_6; import std.stdio; import std.concurrency; import core.thread; enum count = 1000; void incrementer(shared(int) * value) { foreach (i; 0 .. count) { synchronized { // ← このロックは、下のロックとは異なる。 *value = *value + 1; } } } void decrementer(shared(int) * value) { foreach (i; 0 .. count) { synchronized { // ← このロックは、上のロックとは異なる。 *value = *value - 1; } } } void main() { shared(int) number = 0; foreach (i; 0 .. 100) { spawn(&incrementer, &number); spawn(&decrementer, &number); } thread_joinAll(); writeln("Final value: ", number); }