在 Visual Studio 2019 (16.5) 中查看托管线程正在等待的锁被哪个线程占用

栏目: IT技术 · 发布时间: 6年前

内容简介:Visual Studio 2019 (16.5) 版本更新中带来了一项很小很难注意到却非常实用的功能,查看哪一个托管线程正在持有 .NET 对象锁。如果你不了解这个功能如何使用,那么可以阅读本文。Visual Studio 的官方更新日志中对此功能的描述:

Visual Studio 2019 (16.5) 版本更新中带来了一项很小很难注意到却非常实用的功能,查看哪一个托管线程正在持有 .NET 对象锁。

如果你不了解这个功能如何使用,那么可以阅读本文。

更新日志

Visual Studio 的官方更新日志中对此功能的描述:

View which managed thread is holding a .NET object lock

即“查看托管线程正在持有 .NET 对象锁”。

功能入口

这个功能没有新的入口,你可以在“调用堆栈” (Call Stack) 窗口,“并行堆栈” (Parallel Stacks) 窗口,以及“线程”窗口的位置列中查看哪个托管线程正在持有 .NET 对象锁。

Call Stack

示例

现在我们就实际看一下这个功能的用法和效果。于是我写了一点下面的代码。

static void Main(string[] args)
{
    var locker = new object();

    Thread thread = new Thread(() =>
    {
        Console.WriteLine("后台线程尝试获得锁");
        lock (locker)
        {
            Console.WriteLine("后台线程成功获得锁");
        }
    })
    {
        Name = "walterlv thread",
    };

    Console.WriteLine("主线程尝试获得锁");
    Monitor.Enter(locker);
    Console.WriteLine("主线程成功获得锁");

    thread.Start();
}

在这段代码中,主线程获得锁之后直接退出,而新线程“walterlv thread”则尝试获得锁。

现在在 Visual Studio 2019 中运行这段代码,可以看到另一个线程是不可能获得锁的,于是不会输出最后那一句,其他都会输出。

在 Visual Studio 2019 (16.5) 中查看托管线程正在等待的锁被哪个线程占用

随后我们在 Visual Studio 中点击“全部中断”,也就是那个“暂停”图标的按钮。

在 Visual Studio 2019 (16.5) 中查看托管线程正在等待的锁被哪个线程占用

打开调用堆栈窗口(在“调试 -> 窗口 -> 调用堆栈”),可以看到堆栈最顶端显示了正在等待锁,并且指出了线程对象。

在 Visual Studio 2019 (16.5) 中查看托管线程正在等待的锁被哪个线程占用

然后在线程窗口(在“调试 -> 窗口 -> 线程“)的位置列,鼠标移上去可以看到与堆栈中相同的信息。

在 Visual Studio 2019 (16.5) 中查看托管线程正在等待的锁被哪个线程占用

当然,我们的主线程实际上早已直接退出了,所以正在等待的锁将永远不会释放(除非进程退出)。

同样的信息,在并行堆栈(在“调试 -> 窗口 -> 并行堆栈”)中也能看到。

在 Visual Studio 2019 (16.5) 中查看托管线程正在等待的锁被哪个线程占用

参考资料


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。

游戏编程权威指南

游戏编程权威指南

Mike McShaffry 麦克沙福瑞、David “Rez” Graham 格雷海姆 / 师蓉、李静、李青翠 / 人民邮电 / 2016-3 / 99.00元

全书分为4个部分共24章。首部分是游戏编程基础,主要介绍了游戏编程的定义、游戏架构等基础知识。 第二部分是让游戏跑起来,主要介绍了初始化和关闭代码、主循环、游戏主题和用户界面等。 第三部分是核心游戏技术,主要介绍了一些*为复杂的代码 示例,如3D编程、游戏音频、物理和AI编程等。 第四部分是综合应用,主要介绍了网络编程、多道程序设计和用C#创建工具等,并利用前面所讲的 知识开发出......一起来看看 《游戏编程权威指南》 这本书的介绍吧!

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

URL 编码/解码
URL 编码/解码

URL 编码/解码

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具