gpt4 book ai didi

c# - 多生产者,单一消费者

转载 作者:可可西里 更新时间:2023-11-01 15:47:57 25 4
gpt4 key购买 nike

我必须开发一个多线程应用程序,其中会有多个线程,每个线程生成需要保存在队列中的自定义事件日志(不是 Microsoft MSMQ)。

还会有另外一个线程从队列中读取日志数据并进行操作,根据一定的信息将日志信息保存到文件中。基本上,我们在这里实现多生产者、单一消费者范式。

谁能提供有关如何在 C++ 或 C# 中实现此功能的建议。

谢谢,

最佳答案

使用 BlockingCollection<T> 很容易做到这一点在 System.Collections.Concurrent 中定义.

基本上,您创建队列以便所有线程都可以访问它:

BlockingCollection<LogRecord> LogQueue = new BlockingCollection<LogRecord>();

每个生产者向队列中添加项目:

while (!Shutdown)
{
LogRecord rec = CreateLogRecord(); // however that's done
LogQueue.Add(rec);
}

消费者做类似的事情:

while (!Shutdown)
{
LogRecord rec = LogQueue.Take();
// process the record
}

默认情况下,BlockingCollection使用 ConcurrentQueue<T> 作为后备商店。 ConcurrentQueue负责线程同步,并且 BlockingCollection尝试拿取元素时进行非忙碌等待。也就是说,如果消费者调用 Take当队列中没有项目时,它会进行非忙碌等待(不休眠/旋转)直到有项目可用。

关于c# - 多生产者,单一消费者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5105382/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com