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;)