私は大学での作業を行っていますが、10、100、1,000、10,000スレッドが100万回のロックとアンロックを行い、ミューテックス(static Mutex m_mutex = new Mutex();
)、セマフォーがミューテックス(static SemaphoreSlim m_semaphore = new SemaphoreSlim(1);
、正しい?)。C#スレッディングメモリ例外
私は、最初の3例に支障がないんだけど、私は万スレッドの場合にはメモリ例外を得ました。私のコード:
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];
私はミューテックスにし、ミューテックスなどセマフォでテストすることになってるし、エラーはちょうどミューテックスで起こります。
EDITでもスレッド[]スレッドと
=新しいスレッド[numeroDeThreads]。私は= OutOfMemoryException例外だ(...事前に
おかげで、
ペドロDussoが
これをチェックしてくださいhttp://stackoverflow.com/questions/145312/maximum-number-of-threads-in-a-net-app – Andrey
Canあなたは例外の正確なテキストを投稿しますか? –