Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/146.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 无法确定谁调用lock\u wait_C++_Linux_Multithreading_Profiling_Perf - Fatal编程技术网

C++ 无法确定谁调用lock\u wait

C++ 无法确定谁调用lock\u wait,c++,linux,multithreading,profiling,perf,C++,Linux,Multithreading,Profiling,Perf,我有一个多线程应用程序。我可以设置要运行的线程数(简单数据并行)。当尝试使用超过4个线程运行它时,我看到性能显著下降。探查器显示分别由\u L\u unlock\u 532和调用的\u llu unlock\u wake和\u llu lock\u wait消耗的大量时间。我怀疑堆操作上存在锁,因为每个线程都分配和释放大量数据 问题是,任何经过测试的探查器(perf,google的pperf)都不会在\u L_lock\u 926上显示调用者,因此我无法检查我的函数是否导致了此锁定。我想使用一些

我有一个多线程应用程序。我可以设置要运行的线程数(简单数据并行)。当尝试使用超过4个线程运行它时,我看到性能显著下降。探查器显示分别由
\u L\u unlock\u 532
调用的
\u llu unlock\u wake
\u llu lock\u wait
消耗的大量时间。我怀疑堆操作上存在锁,因为每个线程都分配和释放大量数据

问题是,任何经过测试的探查器(perf,google的pperf)都不会在
\u L_lock\u 926
上显示调用者,因此我无法检查我的函数是否导致了此锁定。我想使用一些内存池技术来减少堆操作的数量,但我不想在每次数据收集时都这样做。有没有办法增加此函数的调用堆栈深度

预期建议:

  • 我已经用“-fno省略帧指针”编译了代码
  • 谷歌的tcmalloc似乎帮不上忙
  • 我不能使用
    fork()
    ,因为我的应用程序也需要在windows上运行

是-请链接器将默认堆栈分配设置为更大的值,或者显式地使用更大的堆栈创建线程。“任何已测试的探查器”还有其他:
gprof
callgrind
oprofile
等等。
callgrind
仅为我显示用户空间代码,
perf
perf-g dwarf
显示了相同的信息,所以我不认为这是一个探查器错误。您使用调试信息编译并使用
perf
调用图录制吗?@EOF-是的,我使用
perf-record-g my_app运行它