Endless static this call when used a thread in it

Daniel Kozak via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Tue Jan 13 06:08:17 PST 2015


On Tuesday, 13 January 2015 at 14:02:45 UTC, Daniel Kozák via 
Digitalmars-d-learn wrote:
> V Tue, 13 Jan 2015 13:56:05 +0000
> tcak via Digitalmars-d-learn <digitalmars-d-learn at puremagic.com>
> napsáno:
>
>> On Tuesday, 13 January 2015 at 13:53:11 UTC, tcak wrote:
>> > I have written the following code:
>> >
>> > test.d
>> > ==============================
>> > import core.thread;
>> > import std.stdio;
>> >
>> > void threadFunc(){
>> > 	writeln("Thread func");
>> > }
>> >
>> > public static this(){
>> > 	auto t = new Thread( &threadFunc );
>> > 	t.start();
>> >
>> > 	writeln("Static init");
>> > }
>> >
>> > void main(){
>> >      writeln("End of main");
>> > }
>> >
>> >
>> > run
>> > ======================
>> > rdmd test.d
>> >
>> >
>> > result
>> > ======================
>> > Static init
>> > Thread func
>> > Static init
>> > Thread func
>> > Static init
>> > Thread func
>> > Static init
>> > Thread func
>> > Static init
>> > Thread func
>> > Static init
>> > Thread func
>> > Static init
>> > Thread func
>> > Static init
>> > Thread func
>> > Sta...
>> >
>> > Is this normal, what's happening?
>> 
>> When I defined static init with shared
>> 
>> public shared static this()
>> 
>> it works normal now. But it doesn't explain above issue. 
>> What's the relation between a new thread and a module's 
>> initialiser?
>
> I am not sure but my guess is
>
> static this needs to be called before anything else in module 
> so when
> you try call threadFunc it looks if static this has been called 
> and
> finished which is not true so it call it again
And here is better explanation

http://dlang.org/module.html#staticorder

Static constructors are code that gets executed to initialize a 
module or a class before the main() function gets called.
...

Static constructors and static destructors run on thread local 
data, and are run whenever threads are created or destroyed.


More information about the Digitalmars-d-learn mailing list