如果线程共享相同的文件描述符表,那么每个线程如何读取文件的不同部分?

问题描述 投票:0回答:1

我知道线程几乎共享PCB中的所有内容(PC和堆栈除外),包括文件描述符表。文件描述符表条目是指向系统范围打开的文件表的指针,其中每个条目都具有Op.Type,File offset和File Data。如果一个进程正在打开一个文件并使用系统调用read从同一文件(文件描述符)创建多个线程读取,为什么每个线程都读取文件的不同部分? (鉴于它们访问相同表中的相同文件描述符,因此访问相同文件和相同偏移量?)

linux file pthreads file-descriptor file-management
1个回答
0
投票

来自Kaylum的答案:如果线程使用相同的文件描述符,则如果有任何线程进行读取,它将移动所有线程的文件偏移量。因此,当另一个线程进行读取时,它将与第一个线程读取的内容不同,而是从第一个线程停止读取的位置继续。

因此,它们确实访问系统范围文件表上的相同条目,但是由于每个线程都会更改所有线程的文件偏移,因此它们不会读取文件的同一部分。

© www.soinside.com 2019 - 2024. All rights reserved.