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# lock 有关相关推荐

  1. 中国人工智能网http://www.chinaai.org/

    中国人工智能网 www.ChinaAI.org 人工智能.模式识别.数字图像处理 人工智能论文资料下载 文字识别软件,脱机手写体汉字识别软件程序     <script type="t ...

  2. 自由动力3.6版90个问答(三)

    [41] 问: 增加首页友情连接数目: index.asp查找 friendlist= ShowFriendSite(1,10,1,1) & ShowFriendSite(2,10,1,3)注 ...

  3. C# ASP.NET B/S模式下,采用lock语法 实现多用户并发产生不重复递增单号的一种解决方法技术参考...

    往往我们在开发程序.调试程序时,无法模拟多用户同时操作的实际环境下的运行情况. 为了模拟多用户并发操作,我们先写个多线程的例子来充分模拟多用户并发的情况 Code highlighting produ ...

  4. ASP.NET中在线用户统计

    天极论坛 统计在线用户的作用不言而喻,就是为了网站管理者可以知道当前用户的多少,然后根据用户数量来观察服务器或者程序的性能,从而可以直观的了解到网站的吸引力或者网站程序的效率.现在,我们就介绍一个简单 ...

  5. ASP.NET保持用户状态的九种选择

    2003-06-10 ■陶刚编译 ■yesky 摘要:ASP.NET为保持用户请求之间的数据提供了多种不同的途径.你可以使用Application对象.cookie.hidden fields.Ses ...

  6. ASP.Net ViewState的实现

    选择自 timmy3310 的 Blog ViewState是.Net中提出的状态保存的一种新途径(实际上也是老瓶装新酒):我们知道,传统的Web程序保存状态的方式有这样几种:   1.Applica ...

  7. 转:ASP.NET状态保存方法

    ASP.NET状态保存分为客户端保存和服务器端保存两种: 使用客户端选项存储页信息而不使用服务器资源的这些选项往往具有最低的安全性但具有最快 的服务器性能,因为对服务器资源的要求是适度的.但是,由于必 ...

  8. ASP.NET页面之间传递值的几种方式

    页面传值是学习asp.net初期都会面临的一个问题,总的来说有页面传值.存储对象传值.ajax.类.model.表单等.但是一般来说,常用的较简单有QueryString,Session,Cookie ...

  9. NLog在Asp.Net MVC的实战应用

    Asp.Net MVC FilterAttribute特性.读取xml反序列化.NLog实战系列文章 注:如果你理解了AOP,那么看这篇文章的第三部分可能更轻松点: 如果你理解了单例模式和反射原理, ...

最新文章

  1. 9个必知的 Python 操作文件/文件夹方法
  2. Git 常用命令总结
  3. [Dnode]基于Node.js给浏览器提供异步远程方法调用
  4. 多窗体、窗体传值、打开唯一窗体操作
  5. 《程序员代码面试指南第二版》Python实现(个人读书笔记)
  6. 从C语言的角度重构数据结构系列(六)-C语言的数据类型及常变量
  7. Ogitor的编译配置全过程
  8. POJ3320 Jessica's Reading Problem 尺取法
  9. 遍历二叉树的非递归算法
  10. spring-mvc笔记1
  11. I2c驱动i2c_master_send()和i2c_master_recv()用法
  12. 数据挖掘概念与技术(原书第三版)范明 孟小峰译-----第三章课后习题答案
  13. 智能工厂信息化系统建设规划
  14. 创建FB-定义接口(基础版)
  15. Java中判断两个Date是否是同一天
  16. apktool 回编译说文件名或扩展名太长
  17. CSDN黑科技----简单暴力
  18. 织梦联动添加三级分类后无法添加二级分类的解决方案
  19. 男人三十而立,被动收入,越早开始越好
  20. B/S模式下的MVC架构迭代(2)

热门文章

  1. 信息学奥赛一本通(2023:【例4.8】数据统计)
  2. 图论 —— 图的遍历
  3. 刻录光盘(信息学奥赛一本通-T1383)
  4. 铺地毯(洛谷-P1003)
  5. 温度表达转化(信息学奥赛一本通-T1013)
  6. 51 FI配置-财务会计-固定资产-折旧-维护期间控制方法
  7. dbcp释放不了mysql链接_spring dbcp连接不释放-问答-阿里云开发者社区-阿里云
  8. 基于qtc++设计文本编辑器的代码_文本编辑器Vim/Neovim被曝任意代码执行漏洞,Notepad:兄弟等你好久了...
  9. CNN与MLP之间的关系,优缺点
  10. [Unity] FlowCanvas 使用注意事项