gpt4 book ai didi

C#线程内存异常

转载 作者:行者123 更新时间:2023-11-30 20:10:59 27 4
gpt4 key购买 nike

我正在做一些大学作业,我应该模拟 10、100、1,000 和 10,000 个线程在互斥量中执行 1,000,000 次锁定和解锁 (static Mutex m_mutex = new Mutex(); ) 并在信号量中作为互斥量(static SemaphoreSlim m_semaphore = new SemaphoreSlim(1);,正确吗?)。

我在前三种情况下没有遇到任何问题,但在 10,000 个线程的情况下出现内存异常。我的代码:

        resultados.WriteLine("=== 10 threads ===");
ts = new TimeSpan();
media = 0;
parcial = 0;
resultados.WriteLine("Parciais:");
for (int i = 0; i < 10; i++)
{
parcial = LockAndUnlock_Semaphore_ComDisputa(10);
media += parcial;
ts = TimeSpan.FromTicks(parcial);
resultados.WriteLine(ts.ToString());
}
ts = TimeSpan.FromTicks(media / 10);
resultados.WriteLine("Média: " + ts.ToString());

我应该进行 10 次测试并测量平均值。

private static long LockAndUnlock_Semaphore_ComDisputa(int numeroDeThreads)
{
Thread[] threads10 = new Thread[10];
Thread[] threads100 = new Thread[100];
Thread[] threads1000 = new Thread[1000];
Thread[] threads10000 = new Thread[10000];
//switch in the numeroDeThreads var
//[...]
case 10000:
sw.Start();
for (int i = 0; i < numeroDeThreads; i++)
{
threads10000[i] = new Thread(LockUnlockSemaphore);
threads10000[i].Priority = ThreadPriority.Highest;
threads10000[i].Start();
}
for (int i = 0; i < numeroDeThreads; i++)
{
threads10000[i].Join();
}
sw.Stop();
break;
//[...]
return sw.ElapsedTicks;


static void LockUnlockSemaphore()
{
for (int i = 0; i < 1000000; i++)
{
m_semaphore.Wait();
//thread dentro do semaforo
m_semaphore.Release();
}
}

虽然我发布了这个问题,但我正在再次尝试,但是我创建了这样的线程向量:

Thread[] threads = new Thread[numeroDeThreads];

我应该在互斥量和信号量中测试互斥量,但错误发生在互斥量中。

编辑

即使使用 Thread[] threads = new Thread[numeroDeThreads];我得到了 outofmemoryexception =( ...

提前致谢

佩德罗杜索

最佳答案

10000 个线程将导致分配大量堆栈空间,默认情况下每个线程 1 兆字节。 CLR 将提交此内存,要求它可用,要求您的进程能够使用 10000 MB 的内存。 32 位应用程序无法拥有超过 2 GB 的映射进程内存,从而导致此行为。

查看博客条目 Managed threads in "whole stack committed" shocker这可能会为您提供更多信息。

关于C#线程内存异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4378999/

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