C++ VS2012中的并发分析-读写器锁

C++ VS2012中的并发分析-读写器锁,c++,multithreading,visual-studio-2012,concurrency,profiler,C++,Multithreading,Visual Studio 2012,Concurrency,Profiler,VS并发分析可以检测关键部分、内存分配、句柄等的资源争用,但我不确定它是否检测到Slim Reader Rriter()锁的争用 VS2012并发探查器是否检测SRW的争用 编辑:示例代码和更多详细信息 EnterCriticalSection(&cs); // Use LeaveCriticalSection(&cs); 现在,如果所述代码同时由多个线程执行,则第二个线程将无法获取锁,从而导致争用。VS并发探查器将报告(计数+1)相同的结果。它将被添加到名为CS(与代码中相同

VS并发分析可以检测关键部分、内存分配、句柄等的资源争用,但我不确定它是否检测到Slim Reader Rriter()锁的争用

VS2012并发探查器是否检测SRW的争用

编辑:示例代码和更多详细信息

EnterCriticalSection(&cs);
// Use
LeaveCriticalSection(&cs);
现在,如果所述代码同时由多个线程执行,则第二个线程将无法获取锁,从而导致争用。VS并发探查器将报告(计数+1)相同的结果。它将被添加到名为
CS
(与代码中相同)的CS中。类似地,若线程不能立即持有互斥锁、等待句柄(事件、计时器等),则会报告它


问题是关于SRW-VS报告是否相同?

您是否询问VS 2012中“分析”菜单下的“并发可视化工具”?只要有阻塞发生(即线程被阻塞等待锁定等),该工具就会检测争用,因为它基于内核调度程序ETW事件,每当线程阻塞时都会发生。阻塞在UI中显示为红色

现在,包括SRW在内的许多锁在等待前通常会旋转一段时间,以防发生争用;通常情况下,旋转后无需阻塞即可获得锁(这正是旋转的意图)。在这种情况下,由于没有阻塞,因此工具无法知道发生了旋转(非常短的争用)


希望这能回答您的问题。

不,我不是在谈论“Visualizer”,而是在
Analyze
菜单下的“性能向导”中的“资源争用数据(并发)”选项。同时,我还将尝试Visualizer。