gpt4 book ai didi

c++ - 诊断互斥锁相关瓶颈的正确方法

转载 作者:太空宇宙 更新时间:2023-11-04 14:04:01 25 4
gpt4 key购买 nike

我正在开发一个共享数据结构(std::map)由多个线程读取和更新的应用程序。映射中的元素数量在初始化时是固定的,因此值经常变化但键不会。我使用由 Boost 提供的互斥锁和作用域锁来保护访问:

std::map<Key,Value> dataMap;
boost::mutex m;

void Set(Key k, Value v) {
boost::scoped_lock sl(m);
dataMap[k] = Value;
}

Value Get(Key k) {
boost::scoped_lock sl(m);
return dataMap[k];
}

我如何确定对 map 的访问是否存在瓶颈?在我看来,计算每种情况下获取互斥体需要多长时间是合乎逻辑的,例如

void Set(Key k, Value v) {
Timer t; t.Start();
boost::scoped_lock sl(m);
t.Stop();
cout << "Time taken to acquire mutex: " << t.Elapsed() << endl;
dataMap[k] = Value;
}

我预计,当竞争较低时,平均花费的时间应该较低,而随着竞争的增加(例如,当有大量线程时),平均花费的时间将大大增加。

这是诊断互斥量访问是否存在瓶颈的有效方法吗?

如果没有,是否有任何开源程序可以正确执行类似的功能?

最佳答案

我不确定您的小测试使用什么,但如果您的程序增长,那么我可以推荐英特尔 Inspector 线程错误分析,它不是免费的,但我们发现它绝对值得。它有 30 天的免费试用期,我猜你可以下载它来运行一些 std::map 测试。

http://software.intel.com/en-us/intel-inspector-xe

关于c++ - 诊断互斥锁相关瓶颈的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17824782/

25 4 0