Multi-threading access to device drivers.

Poul-Henning Kamp phk at phk.freebsd.dk
Sat Nov 6 23:46:02 PST 2004


In message <200411070015.iA70FDxm015465 at khavrinen.lcs.mit.edu>, Garrett Wollman writes:
>In article <10847.1099784360 at critter.freebsd.dk> you write:
>>Assume a process with two threads on two CPUs, both
>>doing read(fd, buf, len) at the same time.
>>
>>Should we let both reads into the driver at the same time ?
>>
>>If so, which uio_offset do we hand them ?
>
>POSIX is quite clear on the matter:
>
>> All of the functions chmod (), close (), fchmod (), fcntl (), fstat
>> (), ftruncate (), lseek (), open (), read (), readlink (), stat (),
>> symlink ( ), and write ( ) shall be atomic with respect to each other
>> in the effects specified in IEEE Std 1003.1-2001 when they operate on
>> regular files. If two threads each call one of these functions, each
>> call shall either see all of the specified effects of the other call,
>> or none of them.
>
>(One of the "specified effects" is advancing the file offset.)

Yes, but notice the "... when they operate on regular files." bit.

It doesn't say anything about devices.

-- 
Poul-Henning Kamp       | UNIX since Zilog Zeus 3.20
phk at FreeBSD.ORG         | TCP/IP since RFC 956
FreeBSD committer       | BSD since 4.3-tahoe    
Never attribute to malice what can adequately be explained by incompetence.


More information about the freebsd-arch mailing list