请问各位大大:
有三个线程T1 ,T2, T3 ,T1与T2 可以并行执行,T3需待T1 ,T2都执行完毕才能执行;
1,T1 ,T2同时执行;
2,T1 ,T2执行完毕,T1 ,T2挂起, T3开始执行;
3,T3执行完毕, 唤醒T1 ,T2 重复步骤 1,2
如何用C# 线程实现以上操作 ?请各位给出见解,谢谢!
有三个线程T1 ,T2, T3 ,T1与T2 可以并行执行,T3需待T1 ,T2都执行完毕才能执行;
1,T1 ,T2同时执行;
2,T1 ,T2执行完毕,T1 ,T2挂起, T3开始执行;
3,T3执行完毕, 唤醒T1 ,T2 重复步骤 1,2
如何用C# 线程实现以上操作 ?请各位给出见解,谢谢!
将T1,T2装进一个线程里面,执行完毕再调用T3 ,T3执行完毕就调用那个线程. 如何实现?
线程如何调用另一个线程?
var lock2 = new ManualResetEvent(false);
执行T1并且T1中对lock1执行Set;
执行T2并且T1中对lock2执行Set;
lock1.WaitOne();
lock2.WaitOne();
var lock2 = new ManualResetEvent(false);
执行T1并且T1中对lock1执行Set;
执行T2并且T1中对lock2执行Set;
lock1.WaitOne();
lock2.WaitOne();
执行T3;
比较笨的阻塞方法,主线程基本上是这样: var lock1 = new ManualResetEvent(false);
var lock2 = new ManualResetEvent(false);
执行T1并且T1中对lock1执行Set;
执行T2并且T2中对lock2执行Set;
lock1.WaitOne();
lock2.WaitOne();
执行T3;
{
int interval = 1000; bool hasT1 = false;
bool hasT2 = false;
static AutoResetEvent AutoEvn1 = new AutoResetEvent(true); static AutoResetEvent AutoEvn2 = new AutoResetEvent(true);
static void Main(string[] args)
{
Program p = new Program();
Thread T1= new Thread(new ThreadStart(p.goGetT1));
T1.Start(); Thread T2= new Thread(new ThreadStart(p.goGetT2));
T2.Start();
Thread T3= new Thread(new ThreadStart(p.updateTaobao));
T3.Start();
} public void goGetT1() //
{
while (true)
{
AutoEvn1.WaitOne();
doT1();
}
}
public void doT1()
{
for (int i = 0; i < 10; i++)
{
Console.WriteLine("T1 do running ------- " + i);
Thread.Sleep(interval);
}
AutoEvn1.Reset();
this.hasT1 = true;
}
public void goGetT2() //
{
while (true)
{
AutoEvn2.WaitOne();
doT2();
}
} public void doT2()
{
for (int i = 0; i < 20; i++)
{
Console.WriteLine("T2 in running ------- " + i);
Thread.Sleep(interval);
}
AutoEvn2.Reset();
this.hasT2 = true;
} public void goT3() //更新淘宝库存
{ while (true)
{
if (this.hasT1 && this.hasT2)
{
//
int i = 1;
while (i < 20)
{
Console.WriteLine("T3 in running ------- " + i);
i++;
Thread.Sleep(500);
}
Console.WriteLine("T3 finished");
Thread.Sleep(500);
this.hasT1 = false;
this.hasT2 = false; AutoEvn1.Set();
AutoEvn2.Set();
}
}
}
} 请问还有优化的地方或另一更优化的方法不?