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

做网站维护怎么找客户天然气集团有限公司原副总经理

做网站维护怎么找客户,天然气集团有限公司原副总经理,义乌网络公司排名,西宁做网站wait:表示释放对象上的锁并阻止当前线程,直到它重新获取该锁。 pulse:表示通知等待队列中的线程锁定对象状态的更改。 当线程调用 Wait 时,它会释放对象上的锁并进入对象的等待队列。 对象的就绪队列中的下一个线程 (如果有一个…

wait:表示释放对象上的锁并阻止当前线程,直到它重新获取该锁。

pulse:表示通知等待队列中的线程锁定对象状态的更改。

当线程调用 Wait 时,它会释放对象上的锁并进入对象的等待队列。 对象的就绪队列中的下一个线程 (如果有一个) 获取锁并独占使用该对象。 调用 Wait 的所有线程都保留在等待队列中,直到它们收到来自 Pulse 或 PulseAll 的信号,由锁的所有者发送。 如果 Pulse 发送 ,则只会影响等待队列头部的线程。 如果 PulseAll 发送 ,则等待对象的所有线程都会受到影响。 收到信号后,一个或多个线程离开等待队列并进入就绪队列。 允许就绪队列中的线程重新获取锁。

实例1:Wait(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信号,此等待将无限期的等待下去。

实例2:wait(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三分之一的时间。但是,使用WaitPulse进行信号同步,对比事件等待句柄有以下缺点:

  • Wait / Pulse不能跨越应用程序域和进程使用。

  • 必须通过锁保护所有信号同步逻辑涉及的变量。

http://www.yayakq.cn/news/86225/

相关文章:

  • 文登市城乡建设局网站如何选技能网站建设
  • 山东省 安全双体系建设网站成都制作网站软件
  • 易名中国网站百度下载安装2021最新版
  • 网站突然打不开的原因是连云港优化网站团队
  • 简单的网站源码天河营销型网站建设
  • 网站建设公司怎样做账建设鲜花网站前的市场分析
  • 如何弄公司网站网站维护的基本内容包括哪些
  • 网站建设 手机网站自己做投票网站怎么弄
  • seo内部优化方案株洲正规竞价优化推荐
  • 支付宝网站支付接口会做网站开发 但是不会二次开发
  • 做用户运营应该关注哪些网站wordpress是英文版
  • 潼南区做网站的公司赣州网站建设较好的公司
  • 商务网站 活php网站怎么做伪静态
  • 湖南佳程建设有限公司网站网页简单制作流程
  • 行业网站的优势成功的营销型网站设计特点
  • 微网站是用什么开发的免费申请注册网站
  • 怎么样让网站快速收录校园o2o平台有哪些
  • 网站建设维护保密协议书百度热门排行榜
  • 网站经常被挂码四川省工程造价信息网官网
  • 网站的轮播怎么做花都商城网站建设
  • 网站由哪些部分组成部分组成部分组成中国建设人才信息网站查询
  • 一键生成logo免费网站怎么改一个网站的关键词密度
  • 温州外贸网站设计开发系统需要什么技术
  • 怎么开彩票网站做站长专门做任务的网站
  • 网站建设策划目的及过程电子商务推广方式
  • 公司网站建设管理意见临沂供电公司网站
  • 微商网站模板丹徒网站建设哪家好
  • 网站dw建设免费永久不限空间
  • 广州网站建设信科分公司网站数据库怎么做同步
  • 网站加入地图中国建设教育网证件查询