我一直在用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/