У меня есть экземпляр из класса, подобного этому:
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, но в несортированном порядке. но мой результат показывает, что переменная "ID" в методе "Run ()" как локальная переменная является общей для всех потоков.
![Output][1]
Я хочу знать, есть ли у меня один экземпляр класса, и многие ли потоки запускают метод из этого экземпляра, поэтому локальные переменные этого метода совместно используются всеми потоками? или каждый поток имеет свою локальную копию? Должен ли я создать новый экземпляр для каждого потока из этого класса?