如何将数据从一个线程传递到其他三个线程
本文关键字:线程 其他 三个 数据 一个 | 更新日期: 2023-09-27 18:24:03
我必须编写一个由四个线程组成的应用程序:
- 线程生成一些数据(生产者线程)
- 线程从生产者线程获取数据并执行
Action1(data);
- 线程从生产者线程获取数据并执行
Action2(data);
- 线程从生产者线程获取数据并执行
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();