首先你试图同时解决不同的问题,如果你想提高常规队列的性能,你可以实现一个基于元素优先级的队列(堆)如果你想保持常规队列的优先级,您可以根据整数设置优先级,每次将元素添加到堆中时都会增加该数字。
我在这里附上我在谷歌上找到的第一个链接
Priority queue。如果使用Binary Heap,则插入顺序为 O(log n)
现在如果你想实现允许并发的队列,你需要隔离公共资源(例如堆存储元素的基本结构)。
Albahari 是了解生产者-消费者如何处理并发性的一个很好的参考。
这里是你可以用来为生产者-消费者Concurrency sheet实现并发的所有类
我正在添加其中一种类型的示例
//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;
}
}