| |
c#多线程教学(5):Case 学习多线程 |
出处:csdn |
|
| [ 2005-07-13 10:22:20
] |
作者:c-sharpcorner
|
责任编辑:moningfeng |
在这里,我增加了一个ManualResetEvent对象和ManualResetEvent的数组。
public ManualResetEvent m_mreB;
public ManualResetEvent[] m_mre_array; 添加初始化代码:
m_mreB = new ManualResetEvent(false);
m_mre_array = new ManualResetEvent[2];
m_mre_array[0]=m_mre;
m_mre_array[1]=m_mreB; 启动四个线程:
Thread t0 = new Thread(new ThreadStart(SafeWriteThread));
Thread t0B = new Thread(new ThreadStart(SafeWriteThreadB));
Thread t1 = new Thread(new ThreadStart(SafeReadThread10B));
Thread t2 = new Thread(new ThreadStart(SafeReadThread20B));
t0.IsBackground=true;
t0B.IsBackground=true;
t1.IsBackground=true;
t2.IsBackground=true;
t0.Start();
t0B.Start();
t1.Start();
t2.Start(); 在这里有两个StartThreads和两个WriteThreads,让我们看看他们的执行:
public void SafeWriteThread()
{ m_mre.Reset();
WriteThread();
m_mre.Set(); }
public void SafeWriteThreadB()
{ m_mreB.Reset();
m_mre.WaitOne();
Thread.Sleep(1000);
m_x+=3;
m_mreB.Set(); } 我对第二个WriteThread使用了另外一个事件对象,为了模拟等待第一个线程完成工作。
public void SafeReadThread10B()
{ WaitHandle.WaitAll(m_mre_array);
ReadThread10(); }
public void SafeReadThread20B()
{ WaitHandle.WaitAll(m_mre_array);
ReadThread20(); }
在这里,使用了一个WaitAll的方法,他是WaitHandle基类提供给ManualResetEvent的静态方法,它的参数为我们在前面定义的ManualResetEvent数组。他阻塞当前的线程直到参数数组里面所有的ManualResetEvent对象设置状态为signaled,换一句话说就是等待他们完成了各自的任务。
|