堆栈展开真的需要锁吗?

时间:2014-10-08 12:50:36

标签: 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

1 个答案:

答案 0 :(得分:-3)

如果您需要低延迟,请停止使用例外。