2017-09-22 8 views
2

私が原子を意味するのは成功か失敗か何もしません。複数のプロセス/スレッドがwrite(fd, buf, len)を呼び出す場合、私は知っているsocketpair(AF_LOCAL, SOCK_STREAM)SOCK_SEQPACKETへの書き込みはアトミックですか?

は、アトミックではない、write()の戻り値は多分> 0 && < lenと秩序の外にデータを引き起こします。

socketpair(AF_LOCAL, SOCK_SEQPACKET)によって作成された複数のプロセス/スレッドwrite(buf, len)sock_fdがある場合は、それはアトミックですか?

私はLinuxのマニュアルをチェックし、lenPIPE_BUFより小さい場合、write/writevがアトミックであることを示すpipe()について何かを見つけました。

socketpairについては何も見つかりませんでした。私はテストコードを書いて、それががアトミックであると思われ、ランダムな長さのバッファをfdに書き出し、戻り値が常に-1またはlenになることを発見しました。

答えて

1

はい。

データグラムベースのインターフェイス(つまり、writeに渡すサイズはreadの人に見える)はアトミックでなければなりません。その財産を保証する他の方法はありません。

したがってSOCK_SEQPACKETと同様にSOCK_DGRAMは、機能するためにはアトミックでなければなりません。

非常に同じ理由で、SOCK_STREAMにはこのようなアトミックな保証はありません。

関連する問題