2016-07-15 5 views
-2

私はマルチスレッド化に全く新しいです。私はマルチスレッドにしたい機能は、単に、結果にConsole.WriteLineをCの入力リストでのマルチスレッド化

クラスプログラム を5によって数を多機能である私は、1から100までの番号のリストを持っている簡単なテスト 上で動作するようにしようとしています{ public staticリストデータ=新しいリスト(); public static void Main(文字列[] args) { 新しいプログラム()。run(); foreach(データ内のint型) { Console.WriteLine(d); }

} 
    int multiply (int a){ 
     return 5 * a; 
    } 
    void run() 
    { 
     int threadCount = 5; 
     Task[] workers = new Task[threadCount]; 

     Task.Factory.StartNew(consumer); 

     for (int i = 0; i < threadCount; ++i) 
     { 
      int workerId = i; 
      Task task = new Task(() => worker(workerId)); 
      workers[i] = task; 
      task.Start(); 
     } 

     for (int i = 0; i < 100; ++i) 
     { 
      Console.WriteLine("Queueing work item {0}", i); 
      inputQueue.Add(i); 
      Thread.Sleep(50); 
     } 

     Console.WriteLine("Stopping adding."); 
     inputQueue.CompleteAdding(); 
     Task.WaitAll(workers); 
     outputQueue.CompleteAdding(); 
     Console.WriteLine("Done."); 

     Console.ReadLine(); 
    } 

    void worker(int workerId) 
    { 
     Console.WriteLine("Worker {0} is starting.", workerId); 

     foreach (int workItem in inputQueue) 
     { 
      int b= multiply(workItem); 
      data.Add(b); 
      Console.WriteLine("Worker {0} is processing item {1}." ,workerId,b); 
      Thread.Sleep(100);   // Simulate work. 
      outputQueue.Add(workItem); // Output completed item. 
     } 

     Console.WriteLine("Worker {0} is stopping.", workerId); 
    } 

    void consumer() 
    { 
     Console.WriteLine("Consumer is starting."); 

     foreach (var workItem in outputQueue.GetConsumingEnumerable()) 
     { 
      Console.WriteLine("Consumer is using item {0}", workItem); 
      Thread.Sleep(25); 
     } 

     Console.WriteLine("Consumer is finished."); 
    } 

    BlockingCollection<int> inputQueue = new BlockingCollection<int>(); 
    BlockingCollection<int> outputQueue = new BlockingCollection<int>(); 
} 
+3

質問とは何ですか? –

+0

これを読むことを試みなさいhttp://www.albahari.com/threading/ –

+0

私は1から100までの番号のリストがある。私は同じ方法を動かす5つのスレッドを作りたいと思う。このメソッドは単純に5を掛けてC# –

答えて

1

は、これはあなたが求めているものですか?

using System; 
using System.Collections.Generic; 
using System.Threading; 

class Program 
{ 
    static void Main(string[] args) 
    { 
     List<int> list = new List<int>(); 

     for (int i = 0; i <= 100; i++) { list.Add(i); } 

     foreach (int value in list) 
     { 
      Thread thread = new Thread(() => PrintNumberTimesFive(value)); 
      thread.Start(); 
     } 

     Console.ReadLine(); 
    } 

    static void PrintNumberTimesFive(int number) 
    { 
     Console.WriteLine(number * 5); 
    } 
} 
+0

私はそれが労働者と消費者を持ってほしい。おかげで –

+0

どこかにデータを保存したいのですが?どのようにスレッドの数を制御することができます。たとえば、私は5スレッドを実行したい –

関連する問題