[Spread-users] Question about thread-safety
jschultz at commedia.cnds.jhu.edu
Mon Jun 16 17:38:01 EDT 2003
>>NOTE: if anyone knows how to instruct Unix/Linux systems not to reuse
>>file descriptor IDs in a process, could you please email me or the list
>>a good reference (with page #)? Thanks!
> It is part of the guaranteed semantics of open() that it returns the
> lowest available file descriptor, so there's definitely no way to do
> this unless you simply keep it open.
Doesn't this cause a general race condition in multi-threaded Unix/Linux
applications that open and close file descriptors in multiple threads?
The race condition: a thread is about to operate on file descriptor x, but
just before it does another thread(s) close x and create a new file
descriptor which is assigned the same value as x.
To avoid this race condition wouldn't all calls that create and/or close
file descriptors have to be done in a single thread that ensures no other
threads are operating on any file descriptors it is about to close? If so,
that seems like a BAD thing to me.
> I don't think there's any standard way to force the kernel to never
> re-use a file descriptor without leaving it open as e.g. above. Even if
> there was, a long-running, multithreaded process would eventually run
> out of file descriptors.
I disagree on practical grounds. You could use a 64b counter that is only
incremented to assign file descriptor IDs -- if you flip that bad boy,
then exit. Of course, because we are talking about file descriptors, by
then homo sapiens probably would have already evolved into something else.
Co-Founder, Lead Engineer
D-Fusion, Inc. (http://www.d-fusion.net)
Phn: 443 838 2200
More information about the Spread-users