gpt4 book ai didi

c# - 并发与正常收集?

转载 作者:太空宇宙 更新时间:2023-11-03 19:57:07 24 4
gpt4 key购买 nike

所以我有一个关于 System.Collections.Concurrent 的问题

我看到 Concurrent 实际上是一个安全的线程集合,但在哪些情况下它会有帮助?

我做了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();
}

结果是一样的

当然,它有一些不同的方法,比如 TryDequeue 等等,但它真正有用的是什么?

我们将非常感谢任何帮助 :)

最佳答案

不要使用 lock()连同ConcurrentQueue<>或该 namespace 中的类似项目。这对性能不利。

您可以使用 ConcurrentQueue<>安全地使用多个线程并具有出色的性能。 lock() 不能这样说和定期收集。

这就是为什么你的结果是一样的。

关于c# - 并发与正常收集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32433421/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com