,所以我有一個關於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