Monitor类的访问可以在何时访问呢?Thread2在委托可以在Monitor.Exit()之前进入嘛?
using System
using System.Threading;//
namespace ThreadExample
{//
class FileAccess//
{
public void WriteData(string Data)
{//
Monitor.Enter(this);// //Console.WriteLine( "文件访问.写入数据--开始 ");
//Console.WriteLine( "文件访问.写入数据--工作 ");
for(int cnt=0;cnt <10;cnt++)
{
Console.Write(Data);
}
//Console.WriteLine( "文件访问.写入数据--结束 ");
Console.WriteLine( "....................... ");
Monitor.Exit(this);//释放监视锁
}
}
class ThreadMonitorclass//定义一个其他类
{
public static FileAccess Fd=new FileAccess();//声明一个静态类的对象Fd
public static void ChildThread1()//定义静态方法1将来被委托调用
{
Console.WriteLine( "子线程#1开始 ");
//Console.WriteLine( "子线程#1调用.文件访问写入 ");
Fd.WriteData( "T1 ");
Console.WriteLine( "子线程#1--从输出返回 ");
}
public static void ChildThread2()
{
Console.WriteLine( "子线程#2--开始 ");
//Console.WriteLine( "子线程#2--开始调用文件访问写入数据 ");
Fd.WriteData( "T2 ");
Console.WriteLine( "子线程#2--从输出开始返回 ");
}
public static void Main()
{
ThreadStart Child1=new ThreadStart(ChildThread1);
ThreadStart child2=new ThreadStart(ChildThread2);
//Console.WriteLine( "主---创建子线程 ");
Thread Thread1=new Thread(Child1);
Thread Thread2=new Thread(child2);
Thread1.Start();
Thread2.Start();
Console.ReadLine();
}
}
}
------解决方案--------------------如果2个线程同时调用
Monitor.Enter(this);
。。。。。
Monitor.Exit(this);
段落时,只有一个线程能进入,在结束之前,另外一个线程无法进入
还有,象你这样的情形,使用lock(this)比较好,或者你要坚持手写Monitor方法的话,最好使用try/finally
Monitor.Enter(this);
try
{
}
finally
{
Monitor.Exit(this);
}