How to use core.thread.Thread
aki via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Fri Jul 17 09:25:20 PDT 2015
On Friday, 17 July 2015 at 14:14:41 UTC, byron wrote:
> Since I have yet to use or see anyone use shared in a useful
> way I avoid it.
It's one way to avoid it. So, you mean you always use send/receive
when you need threading?
I did small test to know the memory layout.
import core.atomic;
int foo;
shared int sfoo;
class DerivedThread : Thread {
int count;
shared int scount;
this() {
super(&run);
}
private void run() {
inc();
writefln("at thread: foo=%s, &foo=%s, sfoo=%s, &sfoo=%s",
foo, &foo, sfoo, &sfoo);
writefln("at thread: count=%s, &count=%s, scount=%s,
&scount=%s", count, &count, scount, &scount);
}
void inc() {
++foo;
atomicOp!"+="(sfoo, 1);
++count;
atomicOp!"+="(scount, 1);
}
}
void main() {
auto thr = new DerivedThread();
thr.start();
thr.inc();
thr.join();
writefln(" at main: foo=%s, &foo=%s, sfoo=%s, &sfoo=%s",
foo, &foo, sfoo, &sfoo);
writefln(" at main: count=%s, &count=%s, scount=%s,
&scount=%s", thr.count, &thr.count, thr.scount, &thr.scount);
}
at thread: foo=1, &foo=A33580, sfoo=2, &sfoo=5541E4
at thread: count=2, &count=240178, scount=2, &scount=24017C
at main: foo=1, &foo=984B28, sfoo=2, &sfoo=5541E4
at main: count=2, &count=240178, scount=2, &scount=24017C
That means Thread object "thr" is always shared while
global foo is not shared because it has different memory location.
In my understanding, shared is not only checking something at
compile time,
but also it affects on the memory layout.
Aki.
More information about the Digitalmars-d-learn
mailing list