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