[m-dev.] Interleaved output in hlc.gc.par
novalazy at gmail.com
Thu Sep 17 17:55:47 AEST 2015
On Thu, 17 Sep 2015 17:01:59 +1000, Paul Bone <paul at bone.id.au> wrote:
> On Thu, Sep 17, 2015 at 05:00:27PM +1000, Peter Wang wrote:
> > On Thu, 17 Sep 2015 16:36:42 +1000, Paul Bone <paul at bone.id.au> wrote:
> > >
> > > Should a user reasonably expect calls to io.format to be atomic with respect
> > > to the IO state? I ask because this creates an inconsistency.
> > I don't think so. It is the user's responsibility to serialise any
> > concurrent uses of the stream. It's not specific to io.format.
> > Two threads calling write_string may produce output with interleaved
> > characters, e.g. "Hweolrllod !"
> 1) How can users control this for cases when they need to?
Use one of the synchronisation primitives, e.g. thread.semaphore
> 2) Why are we writing character by character?!?!
We call vfprintf in C, and we can do because there happens to be no
difference between the internal string representation and the external
representation (for now). Apparently POSIX requires that by default
stream operations are atomic so, on some platforms, for some operations,
we would get that atomicity "for free".
It was a slightly bad example, but if we look at the C# implementation
it can write character by character to perform newline translation.
More information about the developers