On Tue, 28 Apr 2009 09:14:15 -0400, dsimcha <[email protected]> wrote:

== Quote from Steven Schveighoffer ([email protected])'s article
Shouldn't you be waiting for the threads to exit at the end of main?  I
wonder if the GC has been shut down by main exiting.
-Steve

I guess you're right. (This test program was written based on a larger program where this effect shows up, and forgetting that was just an oversight.) On the other hand, it still doesn't fix the problem. Also note, in case it's relevant,
my OS is win32.

import core.thread, std.stdio;

void main() {
    Thread[] myThreads;
    foreach(i; 0..4) {
        myThreads ~= new Thread( { doStuff(); });
        myThreads[$ - 1].start;
    }
    doStuff();
}



void doStuff() {
    while(true) {
        synchronized {
            writeln("Doing stuff.");
        }
    }
}


Have you tried synchronizing on an actual object? I remember some time back how Walter proposed removing synchronized as you have written it. Not sure what happened for that.

The way you have written the code, assuming that the synchronized statement is doing what you think it's doing, the call to writeln should be completely syncrhonous, so multithreading issues or not, it should work.

-Steve

Reply via email to