Если многопоточность использует одну и ту же таблицу дескрипторов файлов, как каждый поток считывает отдельную часть файла? - PullRequest
0 голосов
/ 25 апреля 2020

Я понимаю, что потоки разделяют почти все на печатной плате (кроме P C и стека), включая таблицу дескрипторов файлов. Запись в таблице дескрипторов файлов - это указатель на общесистемную открытую таблицу файлов, где каждая запись имеет тип операции, смещение файла и данные файла. Если процесс открывает файл и создает несколько потоков, читающих из одного и того же файла (дескриптор файла) с использованием чтения системного вызова, почему каждый поток будет читать отдельную часть файла? (При условии, что они обращаются к одному и тому же дескриптору файла в одной и той же таблице и, следовательно, к одному и тому же файлу и смещению?)

1 Ответ

0 голосов
/ 25 апреля 2020

Ответ от Kaylum: Если потоки используют один и тот же дескриптор файла, то, если какой-либо поток выполняет чтение, он сместит смещение файла для всех потоков. Следовательно, когда другой поток выполняет чтение, оно не будет таким же, как чтение первого потока, а скорее продолжится с того места, где первый поток прекратил чтение.

Таким образом, они получают доступ к одной и той же записи в файловой таблице всей системы, но поскольку каждый поток изменяет смещение файла для всех потоков, они не читают одну и ту же часть файла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...