0
我嘗試使用Semaphore
類同步三個線程(名爲「1」,「2」和「3」)。他們必須在控制檯中打印一個字符串,其結果是:1-> 2-> 3。這裏是我的代碼:與信號燈同步
class MyThread
{
public Thread Thrd;
static Semaphore sem = new Semaphore(1, 1);
static int flag = 1;
public MyThread(string name)
{
Thrd = new Thread(this.Run);
Thrd.Name = name;
Thrd.Start();
}
void Run()
{
sem.WaitOne();
if (Convert.ToInt32(Thrd.Name) == flag)
{
Console.WriteLine("Thread " + Thrd.Name);
flag++;
}
if (flag == 4)
flag = 1;
Thread.Sleep(300);
sem.Release();
}
}
class SemaphoreDemo
{
static void Main()
{
for (int i = 0; i < 10; i++)
{
MyThread mt1 = new MyThread("1");
MyThread mt2 = new MyThread("2");
MyThread mt3 = new MyThread("3");
mt1.Thrd.Join();
mt2.Thrd.Join();
mt3.Thrd.Join();
}
}
}
但是有時從線程#2和#3中看不到字符串。我的錯誤在哪裏,我該如何解決這個問題?
非常感謝!
Jim Mischel,非常感謝! – user3649515