atomicOp problem

Benjamin Thaut code at benjamin-thaut.de
Thu Oct 21 05:08:58 PDT 2010


I recently read the book "the D programming language" and wanted to try 
out a few of the multithreaded examples pointed out in this book. I 
tried to write a version of the bank account example using the atomicOp 
from core.atomic. But when I compile it, it never finishes, it just gets 
stuck in a endless loop inside atomic.d I think.
Here is the code:

import std.stdio;
import std.concurrency;

enum Messages {
	GO
}

shared class Account {
	private float amount = 0;
		
	float getAmount() const {
		return amount;
	}
		
	void change(float change){
		atomicOp!"+="(amount,change);
	}
}

shared Account bank = null;
	
void otherThread(Tid father){
	send(father,Messages.GO);
	for(int i=0;i<1000;i++)
		bank.change(-100);
}

void main(string[] args)
{
	bank = new Account();
	spawn(&otherThread,thisTid);
	receiveOnly!(Messages)();
	for(int i=0;i<1000;i++)
		bank.change(+100);
	writefln("Program finished. Amount is %s",bank.getAmount());
}

If you could please point out what I did wrong I would be very glad. If 
I did not do anything wrong, I don't quite understand whats the exact 
problem because the code inside atomic.d looks good (at least at my 
level of understanding)

-- 
Kind Regards
Benjamin Thaut


More information about the Digitalmars-d-learn mailing list