C# C语言中FIFO队列的改进#

C# C语言中FIFO队列的改进#,c#,queue,fifo,C#,Queue,Fifo,您好,我正在处理一项任务,我应该实现一个队列来处理等待处理的作业(生产者-消费者问题)。我必须开发一个比FIFO队列更有效的队列。有一些参数描述饥饿发生前的等待时间,即排队结束后需要处理的时间。消费者在指定的时间到来,可以等待指定的时间,轮到他们时,他们会花一些时间来执行他们想做的任何事情。你能帮我找到一种更好的队列而不是FIFO方法吗?首先,你试图同时解决不同的问题,如果你想提高常规队列的性能,你可以根据元素的优先级(堆)实现一个队列如果要保持常规队列的优先级,可以基于整数设置优先级,每次将元

您好,我正在处理一项任务,我应该实现一个队列来处理等待处理的作业(生产者-消费者问题)。我必须开发一个比FIFO队列更有效的队列。有一些参数描述饥饿发生前的等待时间,即排队结束后需要处理的时间。消费者在指定的时间到来,可以等待指定的时间,轮到他们时,他们会花一些时间来执行他们想做的任何事情。你能帮我找到一种更好的队列而不是FIFO方法吗?

首先,你试图同时解决不同的问题,如果你想提高常规队列的性能,你可以根据元素的优先级(堆)实现一个队列如果要保持常规队列的优先级,可以基于整数设置优先级,每次将元素添加到堆中时都增加该数字

这里我附上我在谷歌上找到的第一个链接 . 如果使用

现在,如果要实现允许并发的队列,需要隔离公共资源(例如堆存储元素的基本结构)

这是一个很好的参考,可以了解生产者-消费者如何处理并发性

下面是所有可用于实现生产者-消费者并发性的类

我正在添加一个具有这些类型之一的示例

 //BlockingCollection with a fix number of Products to put, it works with 10 items max on the collection
    class Program
    {
        private static int counter = 1;
        private static BlockingCollection<Product> products =
            new BlockingCollection<Product>(10);

        static void Main(string[] args)
        {
            //three producers
            Task.Run(() => Producer());
            Task.Run(() => Producer());
            Task.Run(() => Producer());

            Task.Run(() => Consumer());

            Console.ReadLine();
        }

        static void Producer()
        {
            while (true)
            {
                var product = new Product()
                {
                    Number = counter,
                    Name = "Product " + counter++
                };

                //Adding one element
                Console.WriteLine("Producing: " + product);
                products.Add(product);

                Thread.Sleep(2000);
            }
        }

        static void Consumer()
        {
            while (true)
            {
                //wait until exist one element
                if (products.Count == 0)
                    continue;

                var product = products.Take();
                Console.WriteLine("Consuming: " + product);

                Thread.Sleep(2000);
            }
        }
    }

    public class Product
    {
        public int Number { get; set; }
        public string Name { get; set; }

        public override string ToString()
        {
            return Name;
        }
    }
//BlockingCollection如果要放置固定数量的产品,它最多可以处理集合中的10个项目
班级计划
{
专用静态整数计数器=1;
私有静态阻止收集产品=
新阻塞集合(10);
静态void Main(字符串[]参数)
{
//三个生产者
Task.Run(()=>Producer());
Task.Run(()=>Producer());
Task.Run(()=>Producer());
Task.Run(()=>Consumer());
Console.ReadLine();
}
静态空隙发生器()
{
while(true)
{
var product=新产品()
{
数字=计数器,
Name=“Product”+计数器++
};
//添加一个元素
控制台写入线(“生产:+产品”);
产品。添加(产品);
《睡眠》(2000年);
}
}
静态无效使用者()
{
while(true)
{
//等待直到存在一个元素
如果(products.Count==0)
继续;
var product=products.Take();
Console.WriteLine(“消费:+产品”);
《睡眠》(2000年);
}
}
}
公共类产品
{
公共整数{get;set;}
公共字符串名称{get;set;}
公共重写字符串ToString()
{
返回名称;
}
}

您尝试过谷歌搜索其他实现吗?有很多不同的实现,有示例和解释。这不是spark notes或免费的家庭作业类网站。从这个开始: