lock 关键字可以用来确保代码块完成运行,而不会被其他线程中断。这是通过在代码块运行期间为给定对象获取互斥锁来实现的。
有一个作为参数的对象,在该参数的后面还有一个一次只能由一个线程执行的代码块
参数必须为基于引用类型的对象 该对象用来定义锁的范围
在上例[private void Function(){lock(obj){}}]中,锁的范围限定为此函数,因为函数外不存在任何对该对象的引用
提供给 lock 的对象只是用来唯一地标识由多个线程共享的资源,所以它可以是任意类实例
此对象通常表示需要进行线程同步的资源
eg:如果一个容器对象将被多个线程使用,则可以将该容器传递给 lock,而 lock 后面的同步代码块将访问该容器。只要其他线程在访问该容器前先锁定该容器,则对该对象的访问将是安全同步的。
最好避免锁定 public 类型或锁定不受应用程序控制的对象实例 如果该实例可以被公开访问,则 lock(this) 可能会有问题,因为不受控制的代码也可能会锁定该对象。这可能导致
死锁 [ 两个或更多个线程等待释放同一对象]
锁定公共数据类型(相比于对象)也可能导致问题
锁定字符串尤其危险,因为字符串被公共语言运行库 (CLR)“暂留,这意味着整个程序中任何给定字符串都只有一个实例
就是这同一个对象表示了所有运行的应用程序域的所有线程中的该文本
只要在应用程序进程中的任何位置处具有相同内容的字符串上放置了锁,就将锁定应用程序中该字符串的所有实例
某些类提供专门用于锁定的成员。例如,Array 类型提供 SyncRoot。许多集合类型也提供 SyncRoot
private static object syncCSListLock = new object();.
lock (syncTSLock)
lock(x)
{
DoSomething();
}
等价于
System.Object obj = (System.Object)x;
System.Threading.Monitor.Enter(obj);
try
{
DoSomething();
}
finally
{
System.Threading.Monitor.Exit(obj);
}
分享到:
相关推荐
在ASP.NET与C#结合的环境中,实现这一功能可以通过多种方式,包括使用Session、Application对象等。下面,我们将基于给定的代码片段,深入探讨如何在ASP.NET C#中统计在线人数。 ### 使用ASP.NET C#统计在线人数 #...
Summary ASP.NET Core in Action is for C# developers without any web development experience who want to get started and productive fast using ASP.NET Core 2.0 to build web applications.
附详细使用说明,非常简单,解决问题直接了当。
### 解析6种ASP.NET跨页面传值的方法 在ASP.NET开发中,跨页面传值是经常遇到的一个问题。为了确保用户体验良好且程序逻辑清晰,开发者需要掌握多种跨页面传值的技术。本文将详细介绍六种常用的ASP.NET跨页面传值...
【C#面试题 asp.net】相关知识点详解 1. **C#中字符串赋值区别** `string str = null` 与 `string str = ""` 的主要区别在于内存分配和对象状态。`str = null` 代表字符串引用未指向任何实例,不分配内存空间。而`...
ASP.NET多线程编程是开发高效、响应迅速的Web应用程序的关键技术之一。它允许开发者在同一个应用程序中同时执行多个任务,提升系统性能并优化资源利用。在ASP.NET中,多线程可以用于后台处理、异步操作、长时间运行...
本文介绍的方法主要是通过ASP.NET中的全局状态存储机制来实现的,具体步骤如下: 1. **使用Application对象存储在线用户信息**: - 创建一个`Hashtable`对象(如`hOnline`),并将其保存到`Application`对象中。 ...
第一章:asp.net和web窗体 4 1.1 NET应用开发架构简介 4 1.2 Web 窗体与ASP.NET页面 7 1.3 ASP.NET 页的结构 11 1.4 Page事件(页面事件) 16 1.2.2 处理回送 20 1.2.3 ASP.NET应用程序示例 23 第二章:WEB服务器...
ASP.NET Core in Action Andrew Lock June 2018 ISBN 9781617294617 712 pages printed in black & white
### 优秀 ASP.NET 及 WinForm 开发人员所需掌握的核心知识点 #### 一、ASP.NET 和 WinForm 基础概念 **1.1 什么是 .NET Framework** .NET Framework 是微软开发的一个软件框架,用于创建各种类型的应用程序,包括...
### ASP.NET实现网站访问...综上所述,通过ASP.NET实现网站访问统计及在线用户数量统计不仅可以为网站运营者提供宝贵的数据支持,还可以帮助开发者更好地理解ASP.NET应用程序的生命周期管理和数据库操作等相关技术。
### 第13章 ASP.NET Web应用程序开发 #### 13.1 Web应用的基本构成 ##### 13.1.1 Web应用与VS2005之前的对比 在Visual Studio 2005发布之前,Web应用程序的开发模型与之后的版本存在一定的差异。早期的Web应用...
在ASP.NET中,网站访问数目统计是一项常见的需求,用于了解网站的活跃度和用户流量。这一功能的实现主要依赖于两种关键概念:Session和Application。接下来我们将深入探讨这两个概念以及如何利用它们来编写统计代码...
【ASP.NET面试题目】主要针对初级程序员,旨在全面评估应聘者的技能和理解力。以下是针对题目内容的详细解答: 知识题: 1. **List, Hashtable, Dictionary的区别和特点**: - **List** 是一种动态数组,适用于...
ASP.NET提供了多种机制来处理这些问题,如锁机制(Lock)、事务管理等。 #### 18. asp.net中Session的过期时间是? 默认情况下,ASP.NET中Session的过期时间为20分钟,但可以通过`<sessionState timeout="30"/>`等...
本文将围绕"JAVA ASP.NET面试题全集"这一主题,深入探讨相关知识点,帮助求职者们更好地准备面试。 首先,JAVA作为全球最广泛使用的编程语言之一,其面试题涵盖了很多方面。在基础部分,面试官可能会考察你对Java...
ASP.NET是一种基于微软.NET框架的服务器端Web应用程序开发平台,用于构建动态网站、Web应用程序和服务。这个"asp.net常用函数表"文档集可能是为了帮助开发者更有效地理解和使用ASP.NET中的核心函数,从而提高开发...