It's tempting to rely on the atomicity of smaller-than-PIPE_BUF
writes, but it doesn't work if mixed with larger ones.
$str = length($str) . "\n" . $str;
# multiple processes write to the same pipe, so use flock
$str = length($str) . "\n" . $str;
# multiple processes write to the same pipe, so use flock
+ # We can't avoid this lock for <=PIPE_BUF writes, either,
+ # because those atomic writes can break up >PIPE_BUF ones
$self->_lock_acquire;
print $w $str or $err = $!;
$self->_lock_release;
$self->_lock_acquire;
print $w $str or $err = $!;
$self->_lock_release;