Ваша программа и ее результаты не показывают, что записи не являются атомарными.Что означает, что записи должны быть атомарными, так это то, что байты, записанные в одном write()
, не будут доступны до тех пор, пока не закончится write()
, а когда они будут доступны, все из них будут доступны,По сути, если вы можете прочитать любой из байтов вообще, вы можете прочитать все из них.У вас нет , чтобы прочитать их все сразу;вы можете read()
выбрать только некоторые из них, а остальные получить позже read()
.Если есть доступные байты из более чем одного write()
, вы можете даже прочитать все байты (которые остались) из одного write()
, а некоторые из следующего.Все гарантии атомарности здесь заключаются в том, что вы не сможете read()
только некоторые байтов из определенного write()
, но не сможете read()
остальных, если вы выберете.
Конечно, атомарные записи гарантируются, только если в буфере канала есть место для записанных байтов - но ваша программа не должна достигать предела.