作者Eric30 (eric)
看板C_Sharp
標題Re: [問題] 三個執行緒循環互鎖
時間Fri Jan 5 19:50:35 2007
※ 引述《ko1 (接逃獄 請寄信)》之銘言:
: public class a
: {
: public void method1(){}
: public void method2(){}
: public void method3(){}
: }
: 在其他地方產生A的物件o
: 然後分別產生thread去執行o.method1 o.method2 o.method3
: 希望達到
: o.method1執行過才執行o.method2
: o.method2執行過才執行o.method3
: o.method3執行過才執行o.method1
: 的循環
: 請問該如何去進行?
: ----
: 在2個互鎖的情形下 只要設一個bool變數去判斷二個method誰可以動作
: 在3個的情況下 我卻搞不清楚 該如何去設定
: 在其中一個method放出 Monitor.Pulse(); 去指定另外某一個method可以動作?
我不大清楚你的狀況 下面code可參考一下 ~
class a
{
public void Method1()
{
Console.WriteLine("Method 1");
}
public void Method2()
{
Console.WriteLine("Method 2");
}
public void Method3()
{
Console.WriteLine("Method 3");
}
}
class Program
{
static void Main(string[] args)
{
a o = new a();
for (int i = 0; i<2;i++ )
{
Thread loThread1 = new Thread(new ThreadStart(o.Method1));
Thread loThread2 = new Thread(new ThreadStart(o.Method2));
Thread loThread3 = new Thread(new ThreadStart(o.Method3));
loThread1.Start();
loThread1.Join();
loThread2.Start();
loThread2.Join();
loThread3.Start();
loThread3.Join();
Console.WriteLine("Done");
Thread.Sleep(2000);
}
}
}
******************
Join 是你要的感覺嗎 ? @@
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.113.197.91
推 ko1:謝謝 但好像不是我想要的功能耶@@ 3個method都是無限回圈 01/05 23:10
→ ko1:我希望一直執行 但是每一輪 都要2等1結束 3等2結束 1等3結束 01/05 23:11
→ ko1:才開始執行 01/05 23:13
推 casiopea:用lock搭配pulse()以及一個bool變數不曉得能不能達成@@" 01/06 01:22
推 ko1:1送出的pulse()可能被2接收 也可能被3接收 我不知道如何去設QQ 01/06 03:03
→ ko1:1固定只讓2接收 2固定只讓3接收 3固定只讓1接收 01/06 03:05