linux c线程结束时是否会关闭在线程中打开的文件描述符,关于c ++:如何确定文件描述符是否已经关闭?...

投票结束之前,请先阅读,我知道有类似的问题(:

这是我的情况-我有一个多线程应用程序。因此,可以说我有10个线程。它们都从同一个文件描述符(实际上是一个socket)中读取。并且在非常罕见的情况下,当发生严重错误时,套接字应通过其中一个线程为shutdown。问题是,这些线程中的任何一个都可以做到这一点。如果关闭套接字失败,则会执行_Exit( FAILURE )(我知道,这听起来像是一个糟糕的设计或代码问题,但实际上并非如此,因为这是由非开源第三方lib引起的,那有个错误)。

这是问题所在-可能所有人都尝试同时shutdown。一个关闭它,但另一个关闭它(由于套接字已经关闭,shutdown返回-1),并且错误的_Exit( FAILURE )被执行,这毁了一切。

显然,我需要进行额外的检查-如果套接字已经关闭(可能所有线程由于某种原因无法关闭套接字,然后至少有一个线程必须执行_Exit,这就是为什么检查还不够)。

好吧,我发现了这个问题,看起来这正是我要尝试的方法。

但是我知道,任何类型的系统调用都需要时间(当然),并且套接字完全关闭的时间取决于操作系统。

问题是-如果套接字已经关闭或由于某种原因无法关闭,我该如何改变? fcntl是否可以确保我,如果一个线程关闭了套接字,并且同时另一个线程尝试了shutdown套接字,它将失败,然后,如果我进行此检查(使用fcntl),这对我有用吗?

我还看到了其他答案,例如:"可以使用select或poll",但是它们仍然是系统调用&#

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值