dmd 1.045 / 2.030 release
Robert Jacques
sandford at jhu.edu
Tue May 12 10:03:12 PDT 2009
On Tue, 12 May 2009 12:41:50 -0400, dsimcha <dsimcha at yahoo.com> wrote:
> == Quote from Tomas Lindquist Olsen (tomas.l.olsen at gmail.com)'s article
>> Is there a reason for the missing announcement ?
>> http://digitalmars.com/d/1.0/changelog.html#new1_045
>> http://www.digitalmars.com/d/2.0/changelog.html#new2_030
>> and what happened to 1.044 ?
>> -Tomas
>
> Probably because it doesn't quite work yet. I'm waiting for some crufty
> old 2.029
> code to run, so I thought I'd try out shared a little. Here are the
> results:
>
> import std.stdio, std.perf, core.thread;
>
> shared uint foo;
>
> void main() {
> auto t = new Thread({stuff();});
> t.start;
> scope pc = new PerformanceCounter;
> pc.start;
> foreach(i; 0..10_000_000) {
> foo++;
> }
> t.join;
> pc.stop;
> writeln(pc.milliseconds);
> uint bar = foo;
> writeln(bar); // Prints some pseudorandom, wrong number.
> }
>
> void stuff() {
> foreach(i; 0..10_000_000) {
> foo++;
> }
> }
>
> Or is the automatic synchronization of shared variables part not
> supposed to be
> implemented yet?
Bartosz hasn't talked about D's shared system yet. Anyways, what you are
seeing is a classic read/write race, and is expected even if foo is
sequential consistent or locked. What you'd need to test is the Peterson
lock
(http://bartoszmilewski.wordpress.com/2008/11/11/who-ordered-sequential-consistency/)
Remember foo++ ->
r1 = foo;
r1++;
foo = r1;
So
lock(foo);
r1 = foo;
unlock(foo);
r1++;
lock(foo);
foo = r1;
unlock(foo);
More information about the Digitalmars-d-announce
mailing list