C # Threading - создается несколько потоков, только 1 или 2 выполняют другие, ожидающие - PullRequest
1 голос
/ 19 августа 2010

У меня есть этот код ниже, где я создаю несколько потоков, обычно около 7, и присоединяюсь к ним, чтобы подождать, пока все не будет сделано:

            List<Thread> threads = new List<Thread>();
            Thread thread;
            foreach (int size in _parameterCombinations.Keys)
            {
                thread = new Thread(new ParameterizedThreadStart(CalculateResults));
                thread.Start(size);
                threads.Add(thread);
            }

            // wait for all threads to finish
            for (int index = 0; index < threads.Count; index++)
            {
                threads[index].Join();
            }

Когда я проверяю это большую часть времени, одновременно работают только один или два потока, только один или два раза при повторном запуске приложения все они выполняются.

Есть ли способ заставить все потоки начать выполнение?

Большое спасибо.

1 Ответ

0 голосов
/ 19 августа 2010

Ваш код в порядке .. Я изменил его, чтобы показать вам, что выполнение потока не ограничено двумя потоками.Я бы искал проблемы в процессе расчета ..

class Program
{
    static void Main(string[] args)
    {
        List<Thread> threads = new List<Thread>();
        Thread thread;
        for (int i = 0; i < 7; i++)
        {
            thread = new Thread(new ParameterizedThreadStart(CalculateResults));
            thread.Start();
            threads.Add(thread);
        }

        // wait for all threads to finish
        for (int index = 0; index < threads.Count; index++)
        {
            threads[index].Join();
        }
    }

    static void CalculateResults(object obj)
    {
        Console.WriteLine("Thread number " + Thread.CurrentThread.ManagedThreadId + " is alive");
        Thread.Sleep(1000);
        Console.WriteLine("Thread number " + Thread.CurrentThread.ManagedThreadId + " is closing");
    }
}
...