NetBSD-Users archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: pwrite() and threads



On Wed, 26 May 2010 14:23:26 +0100
Sad Clouds <cryintothebluesky%googlemail.com@localhost> wrote:

> On Wed, 26 May 2010 12:37:55 +0000
> Wouter Klouwen <dublet%acm.org@localhost> wrote:
> 
> > Yes, but if you write at a specific offset, you might have a small
> > problem. Say two threads simultaneously want to write, they both
> > calculate the offset and then write to that offset. The end result?
> > Possibly one entry lost as one writes over the other due to
> > invalidated offsets. It seems to me that you need to lock before you
> > calculate the offset anyway. If you are logging, why are you not
> > opening these files in "a" mode and just using write() anyway?
> > 
> >     --Wouter
> 
> Yeah I think this is what I was looking for, if you open a file with
> O_APPEND flag, the kernel will atomically position file pointer to the
> end of file before each write().
> 
> There is a constant PIPE_BUF which tells how much data can be written
> atomically to a pipe or fifo. I'm not sure if the same applies to
> regular files.

Just lock the file, or use a logging thread to do the writes from a queue.

-- 
NetBSD - Simplicity is prerequisite for reliability


Home | Main Index | Thread Index | Old Index