Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/28.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 在Linux中评测同步操作_C_Linux_Multithreading_Profiling_Futex - Fatal编程技术网

C 在Linux中评测同步操作

C 在Linux中评测同步操作,c,linux,multithreading,profiling,futex,C,Linux,Multithreading,Profiling,Futex,我想分析同步操作,比如在Linux中锁定和解锁互斥体、信号量等 我知道,在内心深处,它们是使用Futex实现的,所以也许只需分析Futex的锁定和解锁就足够了(如果我在这里错了,请纠正我)。所以我的问题是如何分析它,因为futex操作通常发生在用户空间中。他们有没有什么工具可以让我分析一下 我基本上对锁定Futex和频率的功能感兴趣。你可能对valgrind和它的工具callgrind感兴趣 valgrind --trace-children=yes --tool=callgrind -v ./

我想分析同步操作,比如在Linux中锁定和解锁互斥体、信号量等

我知道,在内心深处,它们是使用Futex实现的,所以也许只需分析Futex的锁定和解锁就足够了(如果我在这里错了,请纠正我)。所以我的问题是如何分析它,因为futex操作通常发生在用户空间中。他们有没有什么工具可以让我分析一下


我基本上对锁定Futex和频率的功能感兴趣。

你可能对valgrind和它的工具callgrind感兴趣

valgrind --trace-children=yes --tool=callgrind -v ./program
它将在文件中生成一个详细的调用图,其中包括每个函数中经过的时间量

然后您可以通过kcachegrind看到所有这些,这是一个很好的可视化数据的UI

kcachegrind
它将允许您查看所有调用pthread_mutex_lock()的函数(或其他函数),以及其中最上面的函数,按时间百分比

callgrind最相关的部分是,您可以很容易地在单线程程序中找到瓶颈,因为您只需查看占用最多cpu时间的函数

在多线程程序中,函数长时间等待某个对象(互斥体)是一种正常情况,因此难度更大

您还可以使用valgrind提供的工具Helgrind,它可以帮助您查找互斥体使用中的错误(潜在的死锁或潜在的数据竞争)

我猜它通过分析同步和数据访问的一致性,分析您对同步函数的调用,以及您读/写的数据,以检测潜在问题(超过1000000次时可能出现的问题)。(我重复一遍:我猜)

valgrind的核心功能是:检查内存泄漏:

valgrind --leak-check=yes -v --db-attach=yes ./program

因此,瓦尔格林再次来拯救我们:)!
valgrind --leak-check=yes -v --db-attach=yes ./program