使用Monitor对资源进行保护(二)

  使用Lock语句

     首先来看一下出现的问题:

  接着我们用Lock来解决这个问题:

创建线程安全类型

   上面的类型Resource不是类型安全的,它的内部并没有采取线程安全(Thread-safe)的措施。

   前面的线程同步时由类型的客户端program来实施的,之所以可行,完全是因为program的作者和resource的作者是同一个人。

    因此,最好的办法是将获取锁,释放锁的逻辑放到resource内部来实现。

下面我们用两种方法来改进它:

  方法一:

   方法二:

使用Monitor来协调线程执行顺序

   使用Monitor保证了资源只能同时由一个线程访问,但是没有限制资源现由线程T1访问,还是先由线程T2访问;

   由于Start方法实际执行时间的不确定,因此结果可能是主线程先访问,也可能是worker线程先访问。

   通常,两个线程执行的不同任务,如工作线程获取计算数据,主线程显示数据。那么此时顺序就很重要了。

   我们在此使用wait和pulse方法:

   下面两个分方法都必须位于lock块内,并且两个方法接收的对象与lock接受的对象相同。

 


Wait


Pulse


暂停当前线程并等待信号;


发出信号,接收信号的线程将会执行后续代码。

 

也可以手动设置等待时间:

当有多个线程等待的时候:

时间: 2024-10-18 09:42:11

使用Monitor对资源进行保护(二)的相关文章

使用Monitor对资源进行保护(一)

首先,来看下使用system.threading.monitor对资源进行保护的思路:   即,使用排它锁,当线程A需要访问某一资源时,对其进行加锁,线程A获取到锁以后,任何其他线程如果再次对资源进行访问,则将其放到等待队列中,知道线程A释放锁之后,再将线程从队列中取出.    主要的两个方法: Enter Exit 获取锁 释放锁      接着是如何利用enter和exit方法实现线程保护的: 使用对象本身作为锁对象 using System; using System.Collection

基于Quick-cocos2d-x的资源更新方案 二

写在前面 又是12点半了,对于一个程序员来说,这是一个黄金时间,精力旺盛,我想,是最适合整理和分享一些思路的时候了. 自从上次写了 基于Quick-cocos2d-x的资源更新方案 同样可见quick-cocos2d-x官方论坛贴子:http://www.cocoachina.com/bbs/read.php?tid=209421&fpage=2 一直觉得有些什么地方不对.思考了许久之后,发现对于framework和update自身模块的更新,是有一定的问题的. 对于update自身模块的更新来

分析建立资源站目的(二)

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 昨天小弟我有分享分析建立资源站目的(一)主要提到前面的两点,选取关键词和选取域名,如果你没有看上一篇的话,建议你去看看. 现在来说说最后几点: 第三点.建站 这个大家可能会有疑问,不就是建站吗,有什么好说的呢,小弟我在这里跟你说一下,因为你是买的高pr的域名,如果你的资源站做的很马虎的话,那么就浪费了你这个域名,别人一看就是到你这个是资源站(

海峡两岸电子商务交流与资源整合系列(二)

就网站的内容而言两岸限制跟管理的重点也大异其趣, 当然违法法律明文规定的内容如色情,赌博等等一类的肯定是一致都不行的, 但是有一些东西两岸却有极为不同的尺度 大陆网站重视"和谐", 对文字内容敏感度较高, 现在流行所谓交互式营销, 讨论版, 留言版,社群类的一大堆, 所谓入境要问俗, 这在互联网上同样适用, 定震在台湾的讲座就建议台商如果没有http://www.aliyun.com/zixun/aggregation/6926.html">管理能力最好就别在大陆自己的

网络114:巨资购域名是为了保护域名资源

近日,米市有消息称某买家以700万巨资"包养"二十几个city.Cn相关域名,随着交易域名的相继上线,域名包养者-网络114成为业界关注的焦点. 现在,打开网络114首页,城市旅游.城市人物.城市广告.城市购等一个个以城市打头的频道名就映入眼帘,而各频道的独立域名citytravel.Cn.cityren.Cn.cityad.Cn.citygo.Cn等即为此次网络114斥巨资购买的city域名. 网络114相关负责人在接受记者采访时表示,网络114之所以花巨资购买域名是为了对网络114

中国保护资源做法遭欧美无理诉讼

中国削减几种主要稀有金属出口 本报综合消息欧盟昨日发表声明称,美国与欧盟当天就中国限制出口稀有金属问题向世界贸易组织(WTO)提起诉讼.报道,这将成为1月份奥巴马上任后,美国向WTO起诉中国的首案. 此前,美国和欧盟未能说服中国削减出口关税并提高锌.锡.钨和黄磷等原材料的配额. 欧盟在这份声明中称:"欧盟23日提请WTO审查有关中国限制出口几种主要的稀有金属问题,这一决定违背了国际贸易准则." 据了解,根据WTO的手续,首先将在当事国间进行双边协商.若协商失败,双方可要求成立争端处理小

http auth basic认证保护后台admin

一个web站点,总会有一些资源需要保护,比如图片文件.某些页面等,使用basic认证简单方便,易于配置,且完全独立于开发.basic认证既可以在web容器上,也可以放到前端服务器上 .需要对后台地址admin进行保护,可以使用http auth basic,既方便又简单  resin配置  basic的resin配置需要在web项目的描述文件web.xml中,通过添加如下内容,可以对指定路径的资源进行保护,所有对指定资源的访问,都需要输入配置的用户名与密码,验证通过后才可以正常访问 Java代码

百度站长平台:闭站保护工具上线 站长再也不用担心关闭网站了

最近的"净网行动"可谓开展得如火如荼,许多大网站也难逃此劫,被彻底"净化"了,一些问题不严重的网站可能需要闭站整顿,但对于站长来说,人世间最痛苦的事莫过于网站关闭,不论是出于主观原因(改版.暂停服务等),还是客观原因(服务器故障.政策影响.备案等),都充满了无奈和不得已;最最痛苦的事莫过于我都闭站了,但响应时间太长,spider还在抓来抓去,影响用户体验;最最最痛苦的事莫过于历尽万难网站重新开启,但恢复正常抓取也需要漫长等待,更有命苦的站点在百度的展现跌入谷底,再想

第十二章-异常处理与程序调试(一)(6)

12.2.2 产生一个资源保护块 Delphi提供了一个保留字finally,用于实现资源的保护: {分配资源} try {资源使用情况} finally {释放资源} end; try-finally-end就形成了一个资源保护块.finally后面的语句是在任何情况下,不论程序是否发生异常,都会执行的. 对于(12.2.1)中的例子如下代码即可确保所分配内存资源的释放: var APointer : Pointer ; AInt , ADiv : Integer; begin ADiv :=