如果你在两个不同的线程中调用相同文件描述符的read
(或write
,或两者)会发生什么(假设我们对本地文件,它是一个套接字文件描述符),而不显式使用同步机制?
Read 和 Write 是系统调用,因此,在单核 CPU 上,“同时”执行两个读取可能很不幸。但是多核...
linux 内核会做什么?
让我们更笼统一点:其他内核(如 BSD)的行为是否总是相同?
编辑:根据close documentation ,我们应该确保文件描述符没有被其他线程中的系统调用使用。因此,在关闭文件描述符之前需要显式同步(因此,如果可能调用它的线程仍在运行,则也围绕读/写)。
最佳答案
任何系统级(系统调用)文件描述符访问在所有主流类 UNIX 操作系统中都是线程安全的。 尽管根据年龄的不同,它们不一定是安全信号。
如果您从两个不同的任务中调用read
、write
、accept
或类似的文件描述符,那么内核的内部锁定机制将解析争论。
对于读取,每个字节可能只被读取一次,写入将以任何未定义的顺序进行。
stdio 库函数 fread
、fwrite
和 co。默认情况下,控制结构也有内部锁定,但通过使用标志可以禁用它。
关于C 读和线程安全 (linux),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35059660/