Possible bug in atomicOp
Benjamin Thaut
code at benjamin-thaut.de
Sat Oct 23 02:16:26 PDT 2010
The following testcase (when executed on dual core at least) results in
a endless loop inside atomicOp.
import std.stdio;
import std.concurrency;
enum Messages {
GO,
END
}
shared class Account {
private double amount = 0;
double getAmount() const {
return amount;
}
void change(double 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);
send(father,Messages.END);
}
void main(string[] args)
{
bank = new Account();
spawn(&otherThread,thisTid);
receiveOnly!(Messages)();
for(int i=0;i<1000;i++)
bank.change(+100);
receiveOnly!(Messages)();
writefln("Program finished. Amount is %s",bank.getAmount());
}
Is this a bug, or am I doing something wrong here?
If it is a bug it is kind of critical because people which are reading
the "the D programming language" book won't be happy to find out that
some of the given examples do not work yet.
--
Kind Regards
Benjamin Thaut
More information about the Digitalmars-d
mailing list