因为在Produce()里,当线程刚开始执行的时候,因为bFlag=false,所以while(bFlag==true);不会循环,就会执行
Console.WriteLine( "Producer{0}",ResourceContent );bFlag = true;语句,导致bFlag=true,这个改变也导致while(bFlag==false);循环退出!
你这线程写法,不确定性太大,写多线程程序千万不要想当然,否则不会得到你预期
的结果!
Console.WriteLine( "Producer{0}",ResourceContent );bFlag = true;语句,导致bFlag=true,这个改变也导致while(bFlag==false);循环退出!
你这线程写法,不确定性太大,写多线程程序千万不要想当然,否则不会得到你预期
的结果!
谢谢!
在程序里面,Producer.Join();Consumer.Join();会起怎样的作用?我看书里面的说明是:阻塞调用线程,直到某个线程终止时为止。那Producer.Join();是阻塞哪个线程的,什么时候阻塞?
可以帮我详细说明一下吗?——线程新手
{
int ResourceContent = 0;
bool bFlag = false; public void Consume()
{
lock(this)
{
if(!bFlag)
{
try
{
System.Threading.Monitor.Wait(this);
}
catch
{}
}
Console.WriteLine( "Consumer:{0}", ResourceContent );
Thread.Sleep(200);
bFlag = false;
System.Threading.Monitor.Pulse(this);
}
} public void Produce()
{
lock(this)
{
if(bFlag)
{
try
{
System.Threading.Monitor.Wait(this);
}
catch
{}
}
ResourceContent++;
Console.WriteLine( "Producer:{0}",ResourceContent );
Thread.Sleep(300);
bFlag = true;
System.Threading.Monitor.Pulse(this);
}
}
这是比较简单的线程同步,但很有用了!
还有个问题想请教:
当线程Start后,直到执行完毕线程函数;那我要重新启动该线程要怎样呢?重新调用Start吗?