请问,多线程Monitor类
时间:2011-12-06
来源:互联网
{
static object ball = new object();
public static void Main()
{
Thread threadPing = new Thread(ThreadPingProc);
Thread threadPong = new Thread(ThreadPongProc);
threadPing.Start();
threadPong.Start();
}
static void ThreadPongProc()
{
lock (ball)
{
for (int i = 0; i < 5; i++)
{
System.Console.WriteLine("ThreadPong: Pong ");
Monitor.Pulse(ball);
Monitor.Wait(ball);
}
}
}
static void ThreadPingProc()
{
lock (ball)
{
for (int i = 0; i < 5; i++)
{
System.Console.WriteLine("ThreadPing: Ping ");
Monitor.Pulse(ball);
Monitor.Wait(ball);
}
}
}
}
我的问题是:
Lock关键字不是有获取锁、释放锁的功能吗?不是封装了try...finally语句吗?
对象锁释放后,队列线程自然就获得了对象锁,为什么还需要执行Pulse方法通知其他线程呢?
作者: ersrcdwer1 发布时间: 2011-12-06
...为什么还需要执行Pulse方法通知其他线程呢
如果没有Monitor.Pulse,那么lock下的循环就会执行到底,然后才退出lock。
也就是说5个"ThreadPong: Pong"或5个"ThreadPing: Ping "会连续出现。
而Monitor.Pulse则暂时交出控制权,使得Ping和Pong可能混合着出现。
作者: gomoku 发布时间: 2011-12-06
作者: bdmh 发布时间: 2011-12-06
引用楼主 ersrcdwer1 的回复:
...为什么还需要执行Pulse方法通知其他线程呢
如果没有Monitor.Pulse,那么lock下的循环就会执行到底,然后才退出lock。
也就是说5个"ThreadPong: Pong"或5个"ThreadPing: Ping "会连续出现。
而Monitor.Pulse则暂时交出控制权,使得Ping和Pong可能混合着出现。
+1
其实用lock 的地方 都应该换成 Monitor
用它的重载方法
作者: Sandy945 发布时间: 2011-12-06
不知道你用lock还用moniter是什么意思
我是网上摘抄的
作者: ersrcdwer1 发布时间: 2011-12-06
Monitor.Pulse(ball);
Monitor.Wait(ball);
完全没必要,多余
作者: ohkuy 发布时间: 2011-12-06
C# code
[MethodImpl(MethodImplOptions.Synchronized)] static void ThreadPongProc() { for(int i = 0; i < 5; i++) { System.Console.WriteLine("ThreadPong: Pong "); } }
作者: ohkuy 发布时间: 2011-12-06
或者使用[MethodImpl(MethodImplOptions.Synchronized)]特性
C# code
[MethodImpl(MethodImplOptions.Synchronized)]
static void ThreadPongProc()
{
for(int i = 0; i < 5; i++)
{
Sy……
[MethodImpl(MethodImplOptions.Synchronized)]啥东西?
没看到过这种写法呢
作者: ersrcdwer1 发布时间: 2011-12-06
上面的Monitor都可以去掉.
直接用lock就可以了.
作者: enter89 发布时间: 2011-12-06
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28