Weird std.stdio threading bug?

dsimcha dsimcha at yahoo.com
Tue Apr 28 06:14:15 PDT 2009


== Quote from Steven Schveighoffer (schveiguy at yahoo.com)'s article
> On Mon, 27 Apr 2009 18:53:04 -0400, dsimcha <dsimcha at yahoo.com> wrote:
> > The following small test program seems to have a weird deadlock or
> > something:
> >  It should keep printing the phrase "Doing stuff." forever, but it only
> > gets
> > through maybe two iterations before its CPU usage does to zero and it
> > stops
> > printing, at least on my computer.  Has anyone noticed any bad behavior
> > with
> > std.stdio and multithreading?
> >
> > import core.thread, std.stdio;
> >
> > void main() {
> >     Thread[] myThreads;
> >     foreach(i; 0..4) {
> >         myThreads ~= new Thread( { doStuff(); });
> >         myThreads[$ - 1].start;
> >     }
> > }
> >
> >
> >
> > void doStuff() {
> >     while(true) {
> >         synchronized {
> >             writeln("Doing stuff.");
> >         }
> >     }
> > }
> >
> >
> > If the writeln line is commented out, this thing keeps executing the
> > empty
> > loop with measurable CPU usage.
> 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.");
        }
    }
}



More information about the Digitalmars-d mailing list