Linuxでsyscallの読み取り/書き込みがどのように行われたかを調べていたところ、次のことがわかりました。
....
loff_t pos = file_pos_read(f.file);
ret = vfs_read(f.file, buf, count, &pos);
file_pos_write(f.file, pos);
fdput(f);
...`
私の質問は次のとおりです。
ロックはどこへ行った?私は次のようなものを想像していたでしょう:
....
lock(f.file); // <-- lock file struct
loff_t pos = file_pos_read(f.file);
ret = vfs_read(f.file, buf, count, &pos);
file_pos_write(f.file, pos);
fdput(f);
unlock(f.file); // <-- unlock file struct
...
複数のスレッドが同時に読み取り/書き込みを試みた場合、それらは同じオフセットで読み取り/書き込みを行うことができますか?
私の理解が正しければ、Linux はオフセットを保護するためにロック メカニズムを使用しません。これは POSIX に準拠していますか?
私は POSIX 仕様を調べましたが、このケースについては何も見つかりませんでした。