Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 12 Oct 2017 00:54:17 +0300
From:      Konstantin Belousov <kostikbel@gmail.com>
To:        freebsd-hackers@freebsd.org
Subject:   Re: fprintf - threadsafe? - i.e. with process linked against '-pthread'?
Message-ID:  <20171011215417.GH95911@kib.kiev.ua>
In-Reply-To: <20171011213452.GB32399@britannica.bec.de>
References:  <03DA6274A199550235DC7351@[10.12.30.106]> <20171011213452.GB32399@britannica.bec.de>

next in thread | previous in thread | raw e-mail | index | archive | help
On Wed, Oct 11, 2017 at 11:34:52PM +0200, Joerg Sonnenberger wrote:
> On Wed, Oct 11, 2017 at 10:13:35AM +0100, Karl Pielorz wrote:
> > Presumably (and from what I can see) fprintf is 'thread safe'? - And it also
> > appears multiple threads could write to a single file using it (i.e. it
> > provides for atomic writes so lines won't intermingle - the lines written
> > don't seem to intermingle).
> 
> stdio does not provide atomic IO. If you have two file handles or even
> just two separate FILE instances sharing the same file handle and two
> threads or processes are writing to them concurrently, buffering will
> result in seemingly random interwoven output. Even using non-buffered IO
> can trigger the same behavior as there is internal blocking going on.
> Try a printf that created i.e. 16K output or so in one way, it should
> increase the chance of seeing this a lot.

Indeed stdio does not provide atomic IO, but it is thread-safe. That is,
each isolated stdio operation, except the ones with explicit _unlocked
suffix, are required to take an exclusive ownership on the FILE for the
duration of the operation. See the description of flockfile().



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20171011215417.GH95911>