gpt4 book ai didi

linux - gcc 4.7.1 C++ 静态局部初始化挂起

转载 作者:太空宇宙 更新时间:2023-11-04 03:32:23 24 4
gpt4 key购买 nike

...如果线程被信号踢出则恢复。没有可用的核心转储或堆栈跟踪。

有人以前见过这种行为并且能够注释任何已知的 gcc/glibc 错误吗?

在 RHEL 5.5 Westmere 和 RHEL 6.5 Sandybridge 上分别见过一次。我第一次做 pstack ,它是在 cxa_guard_acquire 本地静态初始化生成的守卫内部,运行 pstack (=附加/分离 gdb)当时恢复了线程。

最佳答案

这似乎是 this commit 修复的错误的表现。存在该 bug 的版本可以(最少复制所需的三个线程)从“唤醒调用”中取消订阅所有等待静态初始化完成的线程,因此触发初始化的线程在完成后不会唤醒其他线程。

cxa_guard_acquire 的 FSM 有四种可能的状态:

  • 未初始化
  • 正在初始化
  • 初始化+等待
  • 已初始化

第一个命中本地静态变量的线程将机器切换为“初始化”,在初始化完成之前命中它的后续线程将其切换为“初始化+等待”并阻塞在 futex 上。初始化完成后,如果初始化结束时状态为“正在初始化+等待”,则初始化线程会唤醒所有在 futex 上阻塞的人。错误可能会导致“正在初始化+等待重置回“正在初始化””。

关于linux - gcc 4.7.1 C++ 静态局部初始化挂起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32777394/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com