[倾情原创] 锁·二则——lock关键字详解

Timothy Liu 2005-12-25 05:43:16
摘要:多线程同步是个非常有趣的话题。lock关键字在线程同步中起着非常重要的作用,然而市面上的书籍对lock关键的解释都非常粗略,MSDN中的代码也不是很透彻。本文以lock关键字为核心,稍展多线程的议题,以补市面书籍所缺,或许能博您一笑。另一并祝各位新年快乐:D

小序
锁者,lock关键字也。市面上的书虽然多,但仔细介绍这个keyword的书太少了。MSDN里有,但所给的代码非常零乱,让人不能参透其中的玄机。昨天是平安夜,今天自然就是圣诞节了,没别的什么事情,于是整理了一下思路,使用两个例子给大家讲解一下lock关键字的使用和一点线程同步的问题。
……
详细内容:http://blog.csdn.net/FantasiaX/archive/2005/12/25/561797.aspx
...全文
288 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
diandian82 2006-03-26
  • 打赏
  • 举报
回复
上面的情况我觉得应该退出领界区了吧
diandian82 2006-03-26
  • 打赏
  • 举报
回复
学习
nonocast 2006-03-26
  • 打赏
  • 举报
回复
//为了能够作为线程的入口点,程序必需是无参、无返回值

可以是有参数的,用ParameterizedThreadStart就可以咯

我关心的倒是
lock(xxx){
throw new Exception();
}
这种情况怎么办
y1g1y1 2005-12-26
  • 打赏
  • 举报
回复
o
Timothy Liu 2005-12-26
  • 打赏
  • 举报
回复
奉献一下:D
tiaoci 2005-12-26
  • 打赏
  • 举报
回复
没有说你有错误啊,只是说存在潜在的问题~~~~

我比较狂那又怎样啊,你还能吃了我,咔咔

以下转自MSDN,我觉得已经说得很清楚了啊
---------------------------------------
提供给 lock 关键字的参数必须为基于引用类型的对象,该对象用来定义锁的范围。在上例中,锁的范围限定为此函数,因为函数外不存在任何对该对象的引用。严格地说,提供给 lock 的对象只是用来唯一地标识由多个线程共享的资源,所以它可以是任意类实例。然而,实际上,此对象通常表示需要进行线程同步的资源。例如,如果一个容器对象将被多个线程使用,则可以将该容器传递给 lock,而 lock 后面的同步代码块将访问该容器。只要其他线程在访问该容器前先锁定该容器,则对该对象的访问将是安全同步的。

通常,最好避免锁定 public 类型或锁定不受应用程序控制的对象实例。例如,如果该实例可以被公开访问,则 lock(this) 可能会有问题,因为不受控制的代码也可能会锁定该对象。这可能导致死锁,即两个或更多个线程等待释放同一对象。出于同样的原因,锁定公共数据类型(相比于对象)也可能导致问题。锁定字符串尤其危险,因为字符串被公共语言运行库 (CLR)“暂留”。这意味着整个程序中任何给定字符串都只有一个实例,就是这同一个对象表示了所有运行的应用程序域的所有线程中的该文本。因此,只要在应用程序进程中的任何位置处具有相同内容的字符串上放置了锁,就将锁定应用程序中该字符串的所有实例。因此,最好锁定不会被暂留的私有或受保护成员。某些类提供专门用于锁定的成员。例如,Array 类型提供 SyncRoot。许多集合类型也提供 SyncRoot。

Timothy Liu 2005-12-26
  • 打赏
  • 举报
回复
挑刺君:
麻烦您花心思看看,哪里有错误.不妨指教一二----潜在的问题在哪里??
另外,您都已经一颗五角星了,想一想,还有多少人只穿一个裤头呢.你感觉简单,初学者未必感觉简单.相信您也是从那时候过来的吧.小人得志的事儿咱们最好谁也别干.
还有,我是无党派人士.
我感觉你应该学学你楼上的兄弟,人家都俩五星了,也没像你这么狂,而是给予补充和支持(谢谢撒!).
tiaoci 2005-12-26
  • 打赏
  • 举报
回复
另外,你的代码有误导之嫌,我没心思全部看,但是其中的:

lock(typeof(ATM))
lock(this)

这样的代码会存在潜在的问题,因此要避免使用
tiaoci 2005-12-26
  • 打赏
  • 举报
回复
靠,这么简单的东西搞这么复杂

怀疑你是党员出身~~~~~

lock:
确保不同线程不会在同一时间执行 lock 块之间的代码
ChengKing 2005-12-26
  • 打赏
  • 举报
回复
加一个:

(六)线程--分别用lock以及Interlicked和Monitor类实现线程的临界区操作(互斥):
http://blog.csdn.net/chengking/archive/2005/11/30/540644.aspx

more Thread Study article:
http://blog.csdn.net/ChengKing/category/160892.aspx
内容概要:本文围绕“面向高精度电流控制的PMSM多参数PSO辨识模型研究”,系统阐述了基于Simulink的永磁同步电机(PMSM)多参数辨识方法,重点采用粒子群优化算法(PSO)实现对电机关键内部参数的高精度辨识。研究构建了完整的PMSM控制系统仿真模型,结合智能优化算法,解决了传统参数辨识中精度低、收敛慢的问题,有效提升了电流环控制的动态性能与稳态精度。该方法特别适用于对控制精度和响应速度要求较高的工业应用场景,如高性能伺服系统、电动汽车驱动系统等,具有较强的工程实用价值和科研参考意义。文中提供了完整的Simulink仿真模型与配套代码,确保了研究内容的可复现性和实践操作性。; 适合人群:具备电机控制、自动化或电气工程等相关专业背景,熟悉MATLAB/Simulink仿真环境,从事电机驱动系统研发、控制算法设计或相关领域科研工作的工程师及研究生,尤其适合工作1-5年、希望深入理解先进参数辨识技术的研发人员。; 使用场景及目标:①开展高精度PMSM控制系统的设计与参数辨识研究;②学习并掌握PSO等智能优化算法在电机系统参数辨识中的具体实现与调优技巧;③完成学术论文复现、科研项目验证、毕业设计或工程原型开发,提升对现代电机控制核心技术的理解与应用能力。; 阅读建议:建议读者结合提供的Simulink模型与源代码进行动手实践,按照文档逻辑逐步搭建与调试仿真系统,重点关注PSO算法与电机模型的交互机制、目标函数设计及参数收敛过程,通过对比不同工况下的辨识结果,深入理解算法性能与控制精度之间的内在联系。

111,129

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧