如何判断一个函数是否被多个线程调用
How to tell if a function is being called from a multiple threads
我有一个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
相关文章:
- 如何检查线程是否锁定
- MESI协议和std::atomic-它是否确保所有写入立即对其他线程可见?
- 在 openmp 中,omp_get_thread_num是否绑定到物理线程?
- 并发/多线程:是否可以以这种方式生成相同的输出?
- 我是否生成线程并导致内存泄漏?
- 虚假唤醒是否会解锁所有等待线程,甚至是不相关的线程?
- 静态 constexpr 类成员变量对多线程读取是否安全?
- 是否可以创建一个从不同类调用函数的线程?
- 是否有必要获取锁并在不需要唤醒线程时通知condition_variable?
- C++:在多个线程中访问同一数组/向量的不同单元格是否会产生数据竞赛?
- 线程调用的函数对对象删除是否安全?
- 在不同的内存位置同时写入 std::d eque 是否线程安全?
- 在 OpenCV 中访问具有多个线程的 Mat 是否线程安全?
- 在 C++20 中获取当前日期/时间是否线程安全?
- 在 c++ 的多个线程中编写 c 数组的不同项是否线程安全
- 当结构数组在主线程中填充数据时,从结构数组的低索引元素读取是否线程安全
- boost套接字读写功能是否线程安全
- 对磁盘的openmp写入是否线程安全
- 测试静态局部对象的初始化是否线程安全
- Boost ptime是否线程安全