小编dwa*_*oov的帖子

取消已锁定互斥锁的线程不会解锁互斥锁

帮助客户解决他们遇到的问题.我更像是一个系统管理员/ DBA人,所以我正在努力帮助他们.他们说这是内核/环境中的一个错误,我试图证明或反驳它之前我坚持认为它是在他们的代码中或寻求供应商支持操作系统.

发生在Red Hat和Oracle Enterprise Linux 5.7(和5.8)上,应用程序是用C++编写的

他们遇到的问题是主线程启动一个单独的线程来执行可能长时间运行的TCP connect()[客户端连接到服务器].如果"长时间运行"方面花费的时间太长,它们会取消线程并启动另一个线程.

这样做是因为我们不知道服务器程序的状态:

  • 服务器程序启动并运行 - >立即接受连接
  • 服务器程序没有运行,机器和网络正常 - >连接立即失败,错误'连接被拒绝'
  • 机器或网络崩溃或关闭 - >连接需要很长时间才能失败并显示错误'无路由到主机'

问题是取消锁定互斥锁的线程(清理处理程序设置为解锁互斥锁)有时不解锁互斥锁.

这使得主线程试图锁定互斥锁.

详细环境信息:

  • 的glibc-2.5-65
  • 的glibc-2.5-65
  • 的libcap-1.10-26
  • 内核调试2.6.18-274.el5
  • glibc的报头-2.5-65
  • 的glibc-共2.5-65
  • 的libcap-1.10-26
  • 内核DOC-2.6.18-274.el5
  • 内核2.6.18-274.el5
  • 内核头文件,2.6.18-274.el5
  • 的glibc-devel的-2.5-65

代码是使用以下代码构建的:c ++ -g3 tst2.C -lpthread -o tst2

非常感谢任何建议和指导

c c++ linux mutex

10
推荐指数
1
解决办法
9598
查看次数

标签 统计

c ×1

c++ ×1

linux ×1

mutex ×1