如何将数据从一个线程传递到另外三个线程?

时间:2014-09-23 19:06:42

标签: c# .net multithreading producer-consumer data-sharing

我必须编写一个由四个线程组成的应用程序:

  1. 线程生成一些数据(生产者线程);
  2. 线程从生产者线程获取数据并执行Action1(data);
  3. 线程从生产者线程获取数据并执行Action2(data);
  4. 线程从生产者线程获取数据并执行Action3(data);
  5. 如何将相同的数据传递给所有三个消费线程?我只限于.NET 3.0库,即我不能使用ConcurrentQueues等等。

1 个答案:

答案 0 :(得分: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();