【发布时间】:2013-06-30 04:30:54
【问题描述】:
如果你在两个不同的线程中调用read(或write,或两者)会发生什么,在同一个文件描述符上(假设我们对本地文件感兴趣,它是一个套接字文件描述符) , 没有显式使用同步机制?
Read 和 Write 是系统调用,因此,在单核 CPU 上,“同时”执行两次读取可能是不幸的。但是多核...
linux内核会做什么?
让我们更笼统一点:其他内核(如 BSD)的行为是否总是相同的?
编辑:根据close documentation,我们应该确保文件描述符没有被其他线程中的系统调用使用。所以它接缝在关闭文件描述符之前需要显式同步(因此,如果可能调用它的线程仍在运行,也围绕读/写)。
【问题讨论】:
-
你不能不使用同步机制;内核已经为你做到了。
-
我的意思是,明确使用。所以内核自己完成整个工作,对它们的读/写/调用都不需要任何显式同步?
-
据我所知,是的。我实际上不是 linux 内核专家,但我无法想象它不是这样。也许会有更具体的知识的人来。
-
我不知道会发生什么。我永远不会尝试它 - 我有线程打开自己的 fd。
-
试试看 :),告诉我们
标签: c linux multithreading file-descriptor