Erl Ports and Threads
Per Hedeland
hedeland@REDACTED
Thu Dec 16 11:10:30 CET 2004
klacke@REDACTED wrote:
>
>On Thu, Dec 16, 2004 at 03:37:34PM +0600, Casper wrote:
>> Hi Klacke,
>>
>> Thanks for the response.
>>
>> Here I am not talking about simultaneous write() operations on a socket/pipe
>> from the multiple external program. I am talking about multiple threads in
>> one program.
>
>I know, that's what you wrote.
>
>>
>> Is single write() call, atomic or not?
>>
>
>Not.
<nitpick>
Actually this isn't entirely true - when different processes write to
the same pipe, their writes are guaranteed (on a standards-compliant
Unix:-) to be atomic if they are "small enough" - from a decent
pathconf(2) man page:
_PC_PIPE_BUF
The maximum number of bytes which will be written atomically to a
pipe.
(The number is typically 4096 or so.) Whether this is still true for
different threads in a process writing to the same pipe I don't know,
but I would expect so (might be implementation-dependant though). And of
course relying on the undocumented fact that the port communication
channel *is* a pipe, and not e.g. a local socket which doesn't have such
guarantees, isn't a very good idea.
</nitpick>
For all practical purposes, I agree with Klacke's answer.:-)
--Per
More information about the erlang-questions
mailing list