当前位置: 首页 > 面试题库 >

如果在单独的线程中关闭(2)文件描述符,select(2)会做什么?

姬魁
2023-03-14
问题内容

select(2)当正在监视读取的文件描述符被另一个线程关闭时,该函数的行为是什么?

经过一些粗略的测试,它确实会立即返回。我怀疑结果是(a)它仍然继续等待数据,但是,如果您实际上尝试从中读取数据,则会得到EBADF(可能是-
有潜在的竞争),或者(b)它装作好像文件描述符永远不会传入。如果后一种情况为true,则在没有超时的情况下传入单个fd会导致死锁(如果关闭)。


问题答案:

从其他一些调查来看,dwc和bothie都是正确的。

Bothie对问题的回答归结为:这是未定义的行为。这并不意味着它不一定是不可预测的,而是不同的操作系统会以不同的方式进行操作。select(2)在这种情况下,看起来像Solaris和HP-
UX之类的系统将从中返回,但Linux并非基于2001年发布到linux-kernel邮件列表中的帖子。

linux-
kernel邮件列表上的参数本质上是依赖于它的未定义(和无效)行为。在Linux的情况下,调用close(2)文件描述符可以有效地减少对其的引用计数。由于还有select(2)一个引用它的调用,因此fd将保持打开状态并等待输入,直到select(2)返回为止。您将在文件描述符上得到一个事件,然后将其关闭。尝试读取该文件将导致EBADF,前提是该fd尚未回收。

因此,谢谢大家的帮助。



 类似资料:
  • 问题内容: 很抱歉没有自己进行研究并在此处提出要求。我时间很短。 是否可能有两个文件描述符表,用于从单个线程产生的两个或更多线程。两个或多个子线程正在同时访问同一文件,那么同一文件在不同线程中针对同一文件的两次不同打开的偏移量是特定于线程的吗? 谢谢 问题答案: 文件描述符在线程之间共享。如果要“特定于线程”的偏移量,为什么不让每个线程使用不同的文件描述符(多次)?

  • 问题内容: 我认为这个问题更多是“编码风格”,而不是技术问题。 说我有一行代码: 文件描述符会自动关闭还是留在内存中?如果文件描述符未关闭,则首选的关闭方式是什么? 问题答案: 如果将文件对象分配给变量,则可以使用来显式关闭它 另外,(也通常是首选),您可以使用Python文档中提到的关键字(Python 2.5及更高版本): 在处理文件对象时,最好使用关键字。这样做的好处 是 ,即使在执行过程中

  • 当我创建一个简单的非多线程JavaFX应用程序并启动它时,该应用程序会创建一些线程(JavaFXApplicationThread、JavaFXLauncher等)。这些线程中的大多数都已命名,但在我的所有JavaFX应用程序中都有一个未命名的线程(“线程-1”或“线程-2”)。我绝对不会创建自己的线程,因为我尝试启动Hello World JavaFX应用程序(由IDEA生成),其中也包含“线程

  • 2 描述/概览 ffmpeg是一个非常快的视频/音频转换器,其也可以现场抓取音频/视频源,并在任意采样率、尺寸之间调整视频,以及提供多种高品质的滤镜系统。 ffmpeg从任意数量/形式的输入文件中进行读取(可以是普通文件,管道,网络流,设备源等等),通过输入文件选项对输入文件进行设定,通过-i进行标记,并写入到任意数量/形式的输出文件中,任何在命令行中不能被解释为选项的字符串信息(当然也不是被-i

  • 问题内容: 这样做时,我希望在目标目录中包含2个WAR文件。一个将包含 生产 ,而另一个将包含 test / uat 。 我已经试过了: 但是,我最终只能参加测试WAR。 问题答案: 我不认为您可以一步完成此操作(实际上,令Maven没有抱怨您的设置并且不知道应用了哪个设置,我感到很惊讶),我建议您使用配置文件或过滤来管理此使用案件。 如果您确实不同,则可以将maven-war-plugin配置放