How come a thread can access another thread's stack variable?
Christophe
travert at phare.normalesup.org
Fri Nov 25 01:34:12 PST 2011
Andrej Mitrovic , dans le message (digitalmars.D.learn:30764), a écrit :
> import core.thread;
> import std.stdio;
>
> struct Foo
> {
> int field;
> void test()
> {
> writeln("field: ", &field);
> }
> }
>
> void main()
> {
> Foo foo;
> auto thread = new Thread(&foo.test);
> thread.start();
> thread.join();
> foo.test();
> }
>
> This prints the same addresses. std.concurrency won't let you do this,
> while std.parallelism uses some form of "weaker isolation", and it
> seems core.thread has the same weaker isolation principle.
>
> If "foo" is in TLS, how come a new thread can access its members?
It could with a cast to shared, couldn't it ?
A fix would be to make Thread check the shared-ness of context pointer
of the delegate (which may have to be fixed at the compiler level).
--
Christophe
More information about the Digitalmars-d-learn
mailing list