,所以我有一个关于System.Collections.Concurrent并发vs普通收藏?
我看到并发是acctually安全线程收集的问题,但在至极情况下,它可以是有益的?
我制成2个实施例和结果是相同的
首先ConcurrentQueue:
static ConcurrentQueue<int> queue = new ConcurrentQueue<int>();
private static readonly object obj = new object();
static int i = 0;
static int Num = 0;
static void Run(object loopNum)
{
lock (obj)
{
for (int N = 0; N < 10; N++)
{
queue.Enqueue (i);
Thread.Sleep(250);
queue.TryDequeue(out Num);
Console.WriteLine($"{Num} Added! in {loopNum} Loop, ThreadID: [{Thread.CurrentThread.ManagedThreadId}]");
i++;
}
}
}
而现在的正常队列:
static Queue<int> queue = new Queue<int>();
private static readonly object obj = new object();
static int i = 0;
static void Run(object loopNum)
{
lock (obj)
{
for (int N = 0; N < 10; N++)
{
queue.Enqueue (i);
Thread.Sleep(250);
Console.WriteLine($"{queue.Dequeue()} Added! in {loopNum} Loop, ThreadID: [{Thread.CurrentThread.ManagedThreadId}]");
i++;
}
}
}
主要:
static void Main()
{
Thread[] Th = new Thread[] { new Thread(Run), new Thread(Run) };
Th[0].Start("First");
Th[1].Start("Second");
Console.ReadKey();
}
结果a重新相同
当然,它有一些像TryDequeue一样的不同方法,还有一些,但它真的有帮助吗?
任何帮助将非常appriciated :)
有用。 – Jodrell
当试图测量不同线程安全机制之间的时间差时,添加250ms的延迟可能会超过该差异一些数量级...... – GolfWolf