Mail Archives: cygwin/2006/06/30/00:04:34
On Thu, Jun 29, 2006 at 11:36:41PM -0400, Lev Bishop wrote:
>On 6/29/06, Christopher Faylor wrote:
>>The idea of using threads for pipe writing has been bounced around for
>>a long time. It doesn't solve the select problem if there are multiple
>>processes writing to one pipe. That is not a completely unusual event,
>>unfortunately.
>
>Could you be more specific on how it doesn't solve the select problem
>in when there are multiple processes writing on the pipe? As far as I
>can tell, if (and its a big if) we can build something with threads
>that works for a single process, it should work just as well for
>multiple processes. Can you give an example sequence of writes and
>selects that illustrates the problem? (Not that I think the thread
>approach is without problems, I just can't see this one).
Ok. I just skimmed the proposal before and now I have read it more
thoroughly. The multi-process problem that I was thinking about may
not be there but it still doesn't seem very foolproof.
If I understand the plan correctly, in the scenario where select says
it's ok to write but it really isn't, the write would return as if it
succeeded and a writer thread would be created which sits around trying
to empty the pipe. If this happened with a bunch of processes writing
to a pipe, it seems like there would be potential ordering problems if,
say, a master process was telling subprocesses to write to a pipe in
a round robin fashion. In that scenario, if you have n processes, you
could conceivably have n people, blocking waiting to write to a pipe
and the writes might be executed in random order.
Also, in the sequence of events:
does select say I can write to the pipe?
yes: write to the pipe
no: do something else
The "do something else" will always be "off-by-one" since we can't
actually detect if it is ok to write to a pipe until we actually do the
write to the pipe.
cgf
--
Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple
Problem reports: http://cygwin.com/problems.html
Documentation: http://cygwin.com/docs.html
FAQ: http://cygwin.com/faq/
- Raw text -