2014-09-23 136 views
0

我必須寫它由四個線程的應用程序:如何將數據從一個線程傳遞到另外三個線程?

  1. 線程生成一些數據(生產者線程);
  2. 線程獲取生產線的數據,但Action1(data);
  3. 線程獲取生產線的數據,但Action2(data);
  4. 螺紋生產線獲得數據並不會Action3(data);

我怎樣才能通過相同的數據到所有三個消費線程?我僅限於.NET 3.0庫,即我不能使用ConcurrentQueues等等。

+0

繼承線索的所有四次。使用屬性或setter擴展衍生物,甚至可以在t1完成時傳遞數據。然後,在將返回的數據從t1傳遞給派生之後,開始他們的工作。 – icbytes 2014-09-23 19:11:26

+0

'我不能使用ConcurrentQueues等類似的東西。'然後使用標準的字典/隊列/列表,但*鎖*全部讀寫 – 2014-09-23 19:12:56

+0

@ L.B這並不那麼簡單。執行操作「等到你有另一件物品給我,然後給我」是'BlockingCollection'給你的,使得這個操作非常好。它不僅僅是一個「鎖」來重新實現它。 – Servy 2014-09-23 19:49:57

回答

3

其中一種方法是讓生產者在生成數據時觸發一個事件,允許您擁有任意數量的不同訂閱事件的消費者並根據線程池線程中的數據排隊工作。

public class Producer 
{ 
    public event Action<Data> DataProduced; 

    public void Produce() 
    { 
     while (true) 
     { 
      Thread.Sleep(1000);//placeholder for real work 
      DataProduced(new Data());//populate with real data 
     } 
    } 
} 

Producer producer = new Producer(); 

producer.DataProduced += data => 
    ThreadPool.QueueUserWorkItem(_ => Consume1(data)); 
producer.DataProduced += data => 
    ThreadPool.QueueUserWorkItem(_ => Consume2(data)); 
producer.DataProduced += data => 
    ThreadPool.QueueUserWorkItem(_ => Consume3(data)); 

producer.Produce(); 
+0

感謝您的解決方案!它爲我工作! – winsswg 2014-09-24 14:11:53

相關問題