import std.stdio;
import core.thread;
class SharedData
{
public int v;
public void increase()
{
synchronized(this)
{
int a = v;
for(int i; i<1000000; i++){}
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;
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);
}