博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
正则根据name获取input的value值
阅读量:7074 次
发布时间:2019-06-28

本文共 838 字,大约阅读时间需要 2 分钟。

多线程公用一个对象时,也会出现和公用代码类似的问题,这种问题就不应该使用lock关键字了,这里需要用到System.Threading中  

  的一个类Monitor,我们可以称之为监视器,Monitor提供了使线程共享资源的方案。     
    Monitor类可以锁定一个对象,一个线程只有得到这把锁才可以对该对象进行操作。对象锁机制保证了在可能引起混乱的情况下一个时刻  
  只有一个线程可以访问这个对象。Monitor必须和一个具体的对象相关联,但是由于它是一个静态的类,所以不能使用它来定义对象,而且它  
  的所有方法都是静态的,不能使用对象来引用。下面代码说明了使用Monitor锁定一个对象的情形:    
   
    ......    
    Queue   oQueue=new   Queue();    
    ......    
    Monitor.Enter(oQueue);    
    ......//现在oQueue对象只能被当前线程操纵了    
    Monitor.Exit(oQueue);//释放锁    
   
    如上所示,当一个线程调用Monitor.Enter()方法锁定一个对象时,这个对象就归它所有了,其它线程想要访问这个对象,只有等待它使  
  用Monitor.Exit()方法释放锁。为了保证线程最终都能释放锁,你可以把Monitor.Exit()方法写在try-catch-finally结构中的finally代码块  
  里。对于任何一个被Monitor锁定的对象,内存中都保存着与它相关的一些信息,其一是现在持有锁的线程的引用,其二是一个预备队列,队  
  列中保存了已经准备好获取锁的线程,其三是一个等待队列,队列中保存着当前正在等待这个对象状态改变的队列的引用。当拥有对象锁的  
  线程准备释放锁时,它使用Monitor.Pulse()方法通知等待队列中的第一个线程,于是该线程被转移到预备队列中,当对象锁被释放时,在预  
  备队列中的线程可以立即获得对象锁。

 

 

本文转自温景良(Jason)博客园博客,原文链接:,如需转载请自行联系原作者

 

 

 

你可能感兴趣的文章
javascript中的数据类型、Object与Function
查看>>
Python回顾与整理4:序列1—字符串
查看>>
深入浅出WPF(8)——数据的绿色通道,Binding(中)
查看>>
使用WCF Test Client(WcfTestClient.exe) 来测试WCF
查看>>
综合应用WPF/WCF/WF/LINQ之三十:代码生成器之DBMLToDAL
查看>>
.NET开源项目介绍及资源推荐:数据持久层
查看>>
RAC同单实例物理备库的switchover
查看>>
MultiRow发现之旅(三)- 模板管理器和Table
查看>>
Exchange 2010与Exchange Online混合部署PART 4:混合部署
查看>>
panama项目中字符编码问题解决
查看>>
向C#的String类添加按字节截取字符串的扩展方法
查看>>
Python中元组、列表、字典的遍历和相互转化
查看>>
SmoothWall的小企业应用
查看>>
FOSCommentBundle功能包:设置Doctrine ORM映射(投票)
查看>>
Enterprise Library Step By Step系列(十五):配置应用程序块——设计篇
查看>>
Visio中插入公式
查看>>
对于软件生产能解决到痛点的容器技术就是好!Wise2C睿云智合如何运行
查看>>
SharePoint 2013 状态机工作流之扩展自定义状态
查看>>
物联网下的工控机产业发展迅速 潜力正不断被挖掘
查看>>
云上数据安全,初识数据库审计
查看>>