当前位置: 首页 > news >正文

可信赖的郑州网站建设专业的app网站开发

可信赖的郑州网站建设,专业的app网站开发,app开发,湖南常德论坛wait#xff1a;表示释放对象上的锁并阻止当前线程#xff0c;直到它重新获取该锁。 pulse#xff1a;表示通知等待队列中的线程锁定对象状态的更改。 当线程调用 Wait 时#xff0c;它会释放对象上的锁并进入对象的等待队列。 对象的就绪队列中的下一个线程 (如果有一个…wait表示释放对象上的锁并阻止当前线程直到它重新获取该锁。 pulse表示通知等待队列中的线程锁定对象状态的更改。 当线程调用 Wait 时它会释放对象上的锁并进入对象的等待队列。 对象的就绪队列中的下一个线程 (如果有一个) 获取锁并独占使用该对象。 调用 Wait 的所有线程都保留在等待队列中直到它们收到来自 Pulse 或 PulseAll 的信号由锁的所有者发送。 如果 Pulse 发送 则只会影响等待队列头部的线程。 如果 PulseAll 发送 则等待对象的所有线程都会受到影响。 收到信号后一个或多个线程离开等待队列并进入就绪队列。 允许就绪队列中的线程重新获取锁。 实例1Wait(object);     public class MonitorTest{private object _lock new object();public void FuncA(){lock (_lock){Console.WriteLine(进入函数A);Monitor.Wait(_lock);Console.WriteLine(退出函数A);}}public void FuncB(){Thread.Sleep(300);lock (_lock){Console.WriteLine(进入函数B);Thread.Sleep(3000);Monitor.Pulse(_lock);Thread.Sleep(3000);Console.WriteLine(退出函数B);}}}调用MonitorTest monitorTest new MonitorTest(); Task.Run(() monitorTest.FuncA()); Task.Run(() monitorTest.FuncB()); 首先线程A通过wait方法释放锁让线程B获取锁后成功开始执行线程A进入等待队列线程B执行过程中不再需要锁定对象后则会调用pulse发送释放锁的信号让收到信号的线程A从等待队列进入就绪队列当线程B执行完成释放锁后线程A重新获得锁继续执行。 可以看到在线程B中发出Pulse信号后线程A收到信号进入就绪队列此时线程B还没有释放锁直到线程完成3s等待后线程A才重新获取锁wait(object)才返回。 说明1发出pulse信号并不是释放锁只是给等待队列中发送一个信号收到信号的等待线程就会移动到就绪队列。 说明2收到信号的Wait(object);不会立即返回必须等到重新获取到锁后才会返回继续往下执行。如果收不到pulse信号此等待将无限期的等待下去。 实例2wait(object, int32); 此函数会在指定的时间内等待信号如果超时则会自动进入就绪线程。当重新获取锁返回后返回值为fasle.表示未在指定时间内获取锁否则返回true. public class MonitorTest {private object _lock new object();public void FuncA(){lock (_lock){Console.WriteLine(进入函数A);bool flag false;while (!flag){flag Monitor.Wait(_lock, 1000);Console.WriteLine(是否真实信号: flag);}Console.WriteLine(是否真实信号: flag);Console.WriteLine(退出函数A);}}public void FuncB(){Thread.Sleep(300);lock (_lock){Console.WriteLine(进入函数B);Thread.Sleep(3000);//Monitor.Pulse(_lock);Console.WriteLine(退出函数B);}}}调用 MonitorTest monitorTest new MonitorTest(); Task.Run(() monitorTest.FuncA()); Task.Run(() monitorTest.FuncB());说明1这里我们在线程B中并没有发出pulse信号线程也没有无限期等待。 说明2如果我们在2s超时前在线程B中发送pulse信号则返回值为true. 说明3无论我们发不发信号线程A必须在线程B释放锁后重新获得锁才会返回继续执行跟wait(object)一致。 如果超时时间设置为Timeout.Infinite这与wait(object)一样如果设置为0则立即释放锁进入就绪队列。 使用Wait/Pulse需要注意 Wait / Pulse不能lock块之外使用否则会抛异常。Pulse最多释放一个线程而PulseAll释放所有线程。Wait会立即释放当前持有的锁然后进入阻塞等待脉冲收到脉冲会立即尝试重新获取锁如果在指定时间内重新获取则返回true如果在超过指定时间获取则返回false如果没有获取锁则一直阻塞不会返回 性能方面调用Pulse花费大概约是在等待句柄上调用Set三分之一的时间。但是使用Wait和Pulse进行信号同步对比事件等待句柄有以下缺点 Wait / Pulse不能跨越应用程序域和进程使用。 必须通过锁保护所有信号同步逻辑涉及的变量。
http://www.hkea.cn/news/14587578/

相关文章:

  • wap网站引导页特效威海设计网站的
  • 国外游戏代码网站游戏开发软件手机版
  • 四川省建设监理协会官方网站企企管理系统平台
  • 各大网站发布信息html做网站经验技巧
  • 个人网站可以做资讯小说类wordpress注册带密码
  • 做一个公司网站一般多少钱施工员证查询官方网站
  • 图书馆网站建设网站的目的北京便宜网站建设
  • 公司网站主页怎么做如何做公司宣传网站
  • 学做效果图网站有哪些软件有哪些兰州关键词排名公司
  • 宁国市网站关键词优化外包建设房地产公司网站的费用
  • 上海高端网站定制怎么注册公司企业微信
  • 找衣服款式的网站怎么在家开网店挣钱呢
  • 网站开发外包公司坑奥远科技网站建设流程
  • 外国域名注册很多网站电影片头在线制作网站
  • 网站优化知识杭州餐饮 网站建设
  • 国外设计作品网站磁力蜘蛛搜索引擎
  • 一张图片切块做网站背景网站开发薪酬
  • 网站排名工具wordpress 主题和插件下载
  • 成品网站w灬源码999交友企业招聘
  • 龙岗网站建设_公司推广哈尔滨最新通告
  • 莱芜高端网站建设价格大朗网站建设公司
  • 满城建设局官方网站烟台网站建设工资
  • 网站建设采用thinkphp框架的优势东莞标志设计公司
  • 光谷做网站推广公司制作相册视频
  • wordpress修改网站菜单位置wordpress页脚计时
  • 沙田网站仿做荷城网站设计
  • 网站icp备案是什么晋江论坛怎么发图
  • 如何做优秀的视频网站建设一个网站的方法
  • 青岛市网站建设培训学校程序员给别人做的网站违法了
  • 购物网站有哪些平台做网站的是干嘛的