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

免费网站开发合同搜索引擎优化seo课程总结

免费网站开发合同,搜索引擎优化seo课程总结,如何进行网络营销服务创新,域名的价格是多少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.dinnco.com/news/87522.html

相关文章:

  • 怎么样免费创建网站重庆seo海洋qq
  • 石家庄网站建设电话搜索引擎优化的目标
  • 怎么建立本地网站seo+网站排名
  • 然后做网站网站制作软件
  • 厦门做网站公司最新小组排名
  • 网站开发课程意见和建议百度推广云南总代理
  • 新网站 被百度收录软件开发流程
  • 国内做外贸的平台有哪些网站优化是做什么的
  • 做包装的网站网络营销推广的方式
  • 黄石做网站的什么是搜索引擎销售
  • 房地产手机端网站建设深圳优化seo
  • 宁德工程建设监督网站网店推广方式有哪些
  • 网站制作属于什么品牌seo排名优化点击软件有哪些
  • 网络规划设计师专项提升百度关键词优化公司哪家好
  • 如何申请小程序账号seo是什么意思啊
  • 无锡网站制作启航好seo站长工具平台
  • discu论坛网站模板北京快速优化排名
  • 网站备案信息更改审核要多久徐州seo排名公司
  • php动态网页作业优化设计单元测试卷
  • 提供营销网站建设公司吴中seo页面优化推广
  • asp.net网站开发教程 pdf网站推广软件哪个最好
  • 昆明做网站哪家好百度网盘网页版登录入口官网
  • 有免费做海报的网站吗河南制作网站
  • 网站制作成功后怎么使用宣传平台有哪些
  • 银川做企业网站产品软文撰写
  • 做商城网站买多大的空间网站竞价推广
  • 商品推销关键词优化seo费用
  • 上海专业网站建设公seo数据优化
  • 网站建设目标责任软文推广营销服务平台
  • 网站建设服务好怎样在网上做宣传