如何判断一个函数是否被多个线程调用

How to tell if a function is being called from a multiple threads

本文关键字:是否 线程 调用 函数 一个 判断 何判断      更新时间:2023-10-16

我有一个c++函数,它被一个框架调用,而这个框架的代码我没有权限访问。如果框架从多个线程调用此代码,则需要在许多地方放置互斥锁。如果不是这样,我不希望以互斥锁的性能为代价。鉴于我可以通过框架运行代码,是否有一种方法来确定框架是否从多个线程调用函数?

如果您使用c++11,您可以使用std::this_thread::get_id()并在每次函数调用时存储/记录此值。例如,

void my_func()
{
   std::cout << "my_func called from thread " << std::this_thread::get_id() << std::endl;
   ...
}

显而易见队长的评论很重要:RTFM。如果您在文档中找不到指令,您可以使用Matt指出的std::this_thread::get_id(),或者,如果您不想编辑任何代码,请使用调试器!

为你感兴趣的框架函数对应的符号设置一个断点,然后运行你的程序。体面的调试器甚至可以接受regex用一个命令创建多个断点。当程序停止时,只需查看线程id就可以知道是否存在临界区。

以下是lldb和gdb使用正则表达式设置断点的方法:

(lldb) breakpoint set --func-regex regular-expression
(gdb) rbreak regular-expression