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