我有一个C ++函数,由我无法访问的代码框架调用。如果框架从多个线程调用此代码,我需要在多个位置放置互斥锁。如果它没有,我不希望对互斥体进行性能损失。鉴于我可以通过框架运行代码,有没有办法确定框架是否从多个线程调用函数?
答案 0 :(得分:6)
如果你有c ++ 11,你可以使用std::this_thread::get_id()
并在每个函数调用中存储/记录这个值。如,
void my_func()
{
std::cout << "my_func called from thread " << std::this_thread::get_id() << std::endl;
...
}
答案 1 :(得分:-2)
Obvlious船长'评论非常重要:RTFM。如果您在文档中找不到说明,可以使用std::this_thread::get_id()
作为Matt指出,或者,如果您不想编辑任何代码,请使用调试器!
只需为与您感兴趣的框架功能对应的符号设置断点并运行程序。体面的调试器甚至可以接受正则表达式来使用一个命令创建多个断点。当程序停止时,只需查看线程ID,你就会知道你是否有一个关键部分。
以下是使用正则表达式设置断点的lldb和gdb方法:
(lldb) breakpoint set --func-regex regular-expression
(gdb) rbreak regular-expression