c++ - 堆栈展开真的需要锁吗?

标签 c++ gcc

我一直在使用 mutrace 分析我的代码,并得到以下有趣/令人担忧的结果:

Mutex #1260690 (0x0x7f87bc8eea40) first referenced by:
    /usr/lib/mutrace/libmutrace.so(pthread_mutex_lock+0x49) [0x7f87be0b76b9]
    /lib/x86_64-linux-gnu/libgcc_s.so.1(_Unwind_Find_FDE+0x26) [0x7f87bc6eb0e6]

mutrace: Showing 10 most contended mutexes:

Mutex #   Locked  Changed    Cont. tot.Time[ms] avg.Time[ms] max.Time[ms]  Flags
1260690 19066789  1509831   109753     3600.883        0.000        0.226 M-.--.

_Unwind_Find_FDE 似乎必须处理堆栈展开。

我的应用程序是高度多线程的,对延迟要求非常严格,因此我想尽可能轻松地消除这种情况。是否可以使用任何编译器或环境设置来摆脱此函数调用,而无需重写我的代码?我们确实对部分流程控制使用了异常(可能不明智),但要解决这个问题将是一项很大的重构工作。

g++ (Ubuntu 4.8.2-19ubuntu1) 4.8.2

最佳答案

如果您需要低延迟,请停止使用异常。

关于c++ - 堆栈展开真的需要锁吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26257343/

相关文章:

C++ 应用程序构建时间/日期保存

c - -fPIcflags可以增加多少开销?

c++ - 不断收到错误 lnk2019

c++ - 如何检查 llvm callInst 是否包含位播?

c++ - 将 MATLAB 代码转换为 OpenCV C++

c - C 中的隐式数字类型转换

c++ - OpenGL 有没有办法复制现有的 VAO

c++ - c++20 中是否不推荐使用 volatile 限定符?

c++ - 通过计算或转换在 C++ 中来回转换 2 的值的补码?