VS并发性分析可以检测关键部分,内存分配,句柄等的资源争用。但我不确定它是否检测到Slim Reader-Rriter(SRW)锁的争用。
VS2012并发分析器是否检测到SRW的争用?
编辑:示例代码和更多详细信息。
EnterCriticalSection(&cs);
// Use
LeaveCriticalSection(&cs);
现在,如果所述代码同时由多个线程执行,则第二个线程将无法获取锁定,从而无法获得争用。 VS Concurrency Profiler将报告( count + 1 )相同的内容。它将被添加到名为cs
的CS中(如代码中所示)。同样,如果线程无法立即保存,则会报告锁定互斥锁,等待句柄(事件,计时器等)。
关于SRW的问题 - VS的报告是否相同?
答案 0 :(得分:0)
您是否在VS 2012的“Analyze”菜单下询问“Concurrency Visualizer”?只要阻塞发生(即,线程被阻塞等待锁定等),该工具就会检测争用,因为它基于内核调度程序ETW事件,这将在线程阻塞时发生。阻止在UI中显示为红色。
现在,在争用的情况下,包括SRW在内的很多这些锁经常会在等待前旋转一段时间;并且通常可以在旋转之后获得锁定而不需要阻挡(完全是旋转的意图)。在这种情况下,由于没有阻塞,因此工具无法知道发生了旋转(非常短的争用)。
希望这能回答你的问题。