Monitor、Lock使用示例
来源:互联网 发布:阿里云服务器抢票 编辑:程序博客网 时间:2024/05/16 17:07
很久之前的面试就遇到过关于Monitor的一道笔试题,虽然很简单,但是由于我无知啊,基础差,又不上进,所以对很多东西的认识也很肤浅,就像之前人家形容的一部分人——只是工作经验丰富,会写一些代码,会用一些技术,但是却不知道为什么这么写,为什么这么用,这一部分人就包括我,
下面是借用的别人的代码,只是想借用这个代码让自己以后回来翻看时能清楚一些:
using System.Threading;public class Program{ static object ball = new object(); public static void Main() { Thread threadPing = new Thread(ThreadPingProc); Thread threadPong = new Thread(ThreadPongProc); threadPing.Start(); threadPong.Start(); System.Console.ReadLine(); } static void ThreadPongProc() { System.Console.WriteLine("ThreadPong: Hello!"); lock (ball) for (int i = 0; i < 5; i++) { System.Console.WriteLine("ThreadPong: Pong "); Monitor.Pulse(ball); Monitor.Wait(ball); } System.Console.WriteLine("ThreadPong: Bye!"); } static void ThreadPingProc() { System.Console.WriteLine("ThreadPing: Hello!"); lock (ball) for (int i = 0; i < 5; i++) { System.Console.WriteLine("ThreadPing: Ping "); Monitor.Pulse(ball); Monitor.Wait(ball); } System.Console.WriteLine("ThreadPing: Bye!"); }http://write.blog.csdn.net/postedit}
上述三张图是上述代码执行多次的结果,可以看出threadPing和ThreadPong这两个线程并不是谁先Start就是谁先执行,而是由操作系统调度来决定的,
Monitor中有两个队列的概念:ready队列和waiting队列,如果线程A执行了Monitor.Wait(),那么ready队列中排第一的线程就会获得锁,同时线程A进入waiting队列的队尾,如果线程B执行了Monitor.Pulse(),那么waiting队列中排第一的线程就会进入ready队列,
- Monitor、Lock使用示例
- Lock Monitor
- Java Lock使用示例
- lock对象时使用Monitor.Exit导致异常
- Monitor.TryEnter方法和lock语句的使用注意
- Monitor和lock
- lock与Monitor
- Monitor和lock
- 关于lock和monitor
- Java monitor/lock
- Ceph Mutex Lock monitor
- monitor mutex lock in .net
- 线程同步lock and monitor
- Lock和Monitor的区别
- monitor mutex lock in .net
- C#中的lock、Monitor、Mutex
- lock,Monitor,Mutex的区别
- Monitor和Lock的区别
- Linux下的压缩解压缩命令详解
- I 帧,B帧,P帧,IDR帧的区别
- 从B树、B+树、B*树谈到R 树
- OLAP与OLTP的一些基础知识
- windows SDK模拟游戏钢琴的实现(二)
- Monitor、Lock使用示例
- H.264码率控制机制
- asp+as2.0+xml
- 码率控制技术原理
- logoff user in window 2008
- 新建Excel文件,并进行操作,最后保存成文件C#(2)
- c#生成随机位数的汉字字符串
- 世界各大机床工具场复苏
- 实用Eclipse快捷键(每一个都是自己常用的,用不着的一个都不写)