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