【发布时间】:2014-06-11 22:25:51
【问题描述】:
我尝试使用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 的字符串。我的错误在哪里,我该如何解决这个问题?
非常感谢!
【问题讨论】:
标签: c# multithreading synchronization