writefx and threads

Matthias Walter walter at mail.math.uni-magdeburg.de
Thu Jan 25 15:03:26 PST 2007


Jari-Matti Mäkelä Wrote:

> Matthias Walter wrote:
> > Hello,
> > 
> > I've written a simple threaded application, where 30 threads only print some messages. If I use writefln() for this, it looks like this:
> > 
> > ...
> > Thread started...
> > Thread finished.
> > TTThread started...
> > Thread finished.
> > hread started...
> > Thread finished.
> > hread started...
> > Thread finished.
> > ...
> > 
> > If I use standard printf(), this doesn't happen, it looks like
> > 
> > ...
> > Thread started...
> > Thread finished...
> > Thread started...
> > Thread finished...
> > ...
> > 
> > Looking at std/stdio.d, there's a "__fp_lock(fp);" call in writefx(), but it seems to me,
> > this doesn't help to sync the output routines. Or are output routines not
> > supposed to be synced by default? If yes, this seems to be okay from
> some point of view,
> > but is somehow irritating!
> 
> D uses buffered I/O. You may need to explicitly call flush() to finish
> all output before sending new. One other thing, without thread
> synchronization there is no guarantee that the threads are run in a
> specific order.
>
> BTW, please use this newsgroup for reporting bugs, there's
> digitalmars.D.learn for asking questions.
> 

of course, order of execution cannot be determined in advance, but I added fflush(stdout); right after my writef() call. Nothing changed so far.

How do I sync the threads that output of lines doesn't get interrupted? Of course,
one possibility is to put a mutex around the FILE object, checking it before write,
but isn't it normally the case that it already has a mutex to protect against
concurrent writes? as my example shows, printf from glibc does this.

Matthias Walter


More information about the Digitalmars-d-learn mailing list