如何将数据从一个线程传递到其他三个线程

本文关键字:线程 其他 三个 数据 一个 | 更新日期: 2023-09-27 18:24:03

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

  1. 线程生成一些数据(生产者线程)
  2. 线程从生产者线程获取数据并执行Action1(data);
  3. 线程从生产者线程获取数据并执行Action2(data);
  4. 线程从生产者线程获取数据并执行Action3(data);

如何将相同的数据传递给所有三个使用线程?我被限制在.NET 3.0库中,也就是说,我不能使用ConcurrentQueues之类的东西。

如何将数据从一个线程传递到其他三个线程

一种选择是,只要生产者生成数据,就让它触发一个事件,允许任何数量的不同消费者订阅该事件,并在线程池线程中根据该数据排队完成工作。

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