Что произойдет, если вы вызовете read
(или write
или оба) в двух разных потоках в одном и том же дескрипторе файла (позволяет сказать, что нас интересует локальный файл и его дескриптор файла сокета), не используя явно механизм синхронизации?
Чтение и запись - это syscall, поэтому на одном ядре процессора, вероятно, не повезло, что два чтения будут выполняться "одновременно". Но с несколькими ядрами...
Что будет делать ядро linux?
И пусть будет немного более общим: поведение всегда одно и то же для других ядер (например, BSD)?
Изменить: согласно закрыть документацию, мы должны быть уверены, что файловый дескриптор не используется syscall в другом потоке. Таким образом, это будет означать, что явная синхронизация потребуется до закрытия дескриптора файла (и, следовательно, также вокруг чтения/записи, если поток, который может вызвать его, все еще работает).