【发布时间】:2011-05-28 12:53:07
【问题描述】:
我有这样一个类的实例:
public class One
{
Semaphore S = null;
public One(Semaphore S)
{
this.S = S;
}
public void Run(int ID)
{
S.WaitOne();
Console.WriteLine("Thread [" + ID + "] Entered");
Random R = new Random();
Thread.Sleep(R.Next(100, 1000));
Console.WriteLine("Thread [" + ID + "] Exited");
S.Release();
}
}
在我的程序中,我实例化了几个新线程。每个线程运行上述类中的“Run()”方法。
Semaphore S = new Semaphore(5, 5);
One O = new One(S);
for (int j = 0; j < 10; j++)
{
Thread T = new Thread(delegate() { O.Run(j); });
T.Start();
}
我希望看到从 0 到 9 的数字列表,但未排序。但我的结果显示“Run()”方法中的“ID”变量作为局部变量在所有线程之间共享。
![Output][1]
我想知道我是否有一个类的实例并且许多线程从该实例运行一个方法,那么该方法的局部变量是否在所有线程之间共享?还是每个线程都有自己的本地副本?我应该为该类的每个线程创建一个新实例吗?
【问题讨论】:
-
我认为共享的不是 ID 变量,而是循环中的 j 。我认为它是通过引用传递给代表的,所以他们都看到同一个 ..
标签: c# multithreading synchronization