多线程生产者消费者问题
--------------------编程问答-------------------- 原来如此 --------------------编程问答-------------------- 1,根本不一样,对2个属性而已。2,获得修改。 --------------------编程问答-------------------- 围观,, --------------------编程问答--------------------
1,我删掉之后确实是有问题。
lock只是保证在执行那段代码的时候别的线程不能进入,防止f和n的错乱
可是monitor.wait和monitor.PulseAll去掉之后理论上哪里说不过去啊
2,删掉之后没什么反应,是不是就是多余的?
--------------------编程问答--------------------
lock (this)
{
while (f == 5)
{
try
{
Console.WriteLine(name + "is waiting for apple.");
Monitor.Wait(this);
}
catch (ThreadInterruptedException)
{ }
}
f = f + 1;
Console.WriteLine(name + "is eating apple");
Monitor.PulseAll(this);
}
相当于:
Monitor.Enter(this);
try
{
while (f == 5)
{
try
{
Console.WriteLine(name + "is waiting for apple.");
Monitor.Wait(this);
}
catch (ThreadInterruptedException)
{ }
}
f = f + 1;
Console.WriteLine(name + "is eating apple");
Monitor.PulseAll(this);
}
finally
{
Monitor.Exit(this);
}
标准的Monitor用法
这里的同步纯粹就是为了在 put 和 get 之间同步 f 这个变量
Wait是等待 有空间可以放盘子 或有 盘子可吃
PulseAll 是通知正在 Wait(如果正在Wait的话) 的另一方有 空间可以放盘子 或有 盘子可吃
至于EatAppleSmp,确实没用到,至少是当前没有用到
还有最好是不用Thread.CurrentThread.Abort();
而是 put 返回 false ,线程函数判断并返回,以此正常结束线程
另外就是 get 没有结束的机制
补充:.NET技术 , C#