mam następujący problem - klasa zbudowana zgodnie ze wzorcem producer/consumer i w niej:
public TaskQueue(AutSessClass[] workerSessions, ref Queue<CardApplication> inputQueue
, ref Queue<CardApplication> outputQueue)
{
workers = new Thread[workerSessions.Length];
taskQ = inputQueue;
outTaskQ = outputQueue;
sessions = workerSessions;
}
public void StartProcessing()
{
for (int i = 0; i < sessions.Length; i++)
{
ThreadStart ts = delegate { Consume(sessions[i]); };
(workers[i] = new Thread(ts)).Start();
}
}
w głównym wątku inicjalizacja i odpalenie procesu:
Queue<CardApplication> a = new Queue<CardApplication>();
AutSessClass[] sessions = new AutSessClass[2];
sessions[0] = null; sessions[1] = null;
a.Enqueue(null); a.Enqueue(null); a.Enqueue(null); a.Enqueue(null); a.Enqueue(null);
Queue<CardApplication> b = new Queue<CardApplication>();
Queue<CardApplication> c = new Queue<CardApplication>();
TaskQueue q = new TaskQueue(sessions, ref a, ref b);
TaskQueue q1 = new TaskQueue(sessions, ref b, ref c);
q.StartProcessing(); q1.StartProcessing();
W momencie uruchomienia q1.StartProcessing(); w środu dzieją się czary z mleka - w środu pętli zmienna i ma wartość 2 (dwa) i wywala index out of bounds.
Wygląda na to, że wątki wzajemnie nadpisują sobie wartość zmiennej i z tym, że nie mam pojęcia dlaczego - są dwie osobne instancje klasy, nie ma zmiennych statycznych...
z góry dzięki za podpowiedzi;)