【发布时间】:2015-09-07 07:38:52
【问题描述】:
所以我有一个关于 System.Collections.Concurrent 的问题
我看到 Concurrent 实际上是一个安全的线程集合,但在哪些情况下它会有所帮助?
我做了2个例子,结果是一样的
首先是并发队列:
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();
}
结果是一样的
当然,它有一些不同的方法,比如 TryDequeue 等等,但它真的有什么用呢?
任何帮助都会非常感激:)
【问题讨论】:
-
在多个线程上同时访问集合时很有用。
-
在尝试测量不同线程安全机制之间的时间差异时,添加 250 毫秒的延迟可能会超过该差异几个数量级......
标签: c# multithreading