VS2012 中的并发分析 - 读取器写入器锁
Concurrency Profiling in VS2012 - Reader Writer Locks
VS 并发分析可以检测关键部分、内存分配、句柄等的资源争用。但我不确定它是否检测到对超薄读取器 (SRW) 锁的争用。
VS2012 并发探查器是否检测到 SRW 争用?
编辑:示例代码和更多详细信息。
EnterCriticalSection(&cs);
// Use
LeaveCriticalSection(&cs);
现在,如果所述代码由多个线程同时执行,则第二个线程将无法获取锁,从而导致争用。VS 并发探查器将报告相同的 (计数+1)。它将被添加到名为 cs
的 CS 中(如代码中所示)。同样,如果线程无法立即持有它,将报告锁定互斥锁,等待句柄(事件,计时器等)。
问题是关于 SRW - VS 报告是否相同?
您是否在询问VS 2012中"分析"菜单下的"并发可视化工具"?只要发生阻塞(即线程被阻塞等待锁定等),该工具就会检测争用,因为它基于内核计划程序 ETW 事件,每当线程阻塞时都会发生这些事件。阻止在 UI 中显示为红色。
现在,包括SRW在内的许多这些锁通常会在等待之前旋转一段时间,以防发生争用;并且通常可以在旋转后获得锁而无需阻塞(正是旋转的意图)。在这种情况下,由于没有块,因此该工具无法知道发生了旋转(非常短的争用)。
希望这能回答你的问题。
相关文章:
- 理解boost::asio-async_read在无需读取内容时的行为
- 使用新行和不使用新行读取文件
- 读取文件并输入到矢量中
- 用c++从输入文件中读取另一行
- 读取文件的最后一行并输入到链接列表时出错
- 在进程中对同一管道进行读取和写入时C++管道出现问题
- 无法找到/读取配置文件.conf-FileIOException
- 如何使用Luacneneneba API正确读取字符串和表参数
- C++将文本文件中的数据读取到结构数组中
- 正在将csv文件读取为双精度矢量
- 为什么 sscanf 无法从一个字符串中读取uint64_t和字符?
- 为什么在读取文件大小时文件IO速度会发生变化
- 控制允许动态运行c++的并发操作数
- 非原子变量上的并发读取
- 在C++中,如何在并发读取和锁定的单线程写入uncodered_map之间进行交替
- N 个并发读取器和 1 个生产者的习语或模式
- 读取另一个线程中并发运行的 pthread 的本地数据
- VS2012 中的并发分析 - 读取器写入器锁
- c++映射两个线程并发的插入和读取
- 并发修改和读取单个全局变量