Browse Source

threading: fixed shutdown bug.

pull/36/head
Marcus Cuda 17 years ago
parent
commit
a78f202b2c
  1. 17
      src/Numerics/Threading/ThreadQueue.cs
  2. 4
      src/UnitTests/ThreadingTests/ParallelForTests.cs

17
src/Numerics/Threading/ThreadQueue.cs

@ -138,16 +138,17 @@ namespace MathNet.Numerics.Threading
while (_running)
{
// Check whether we should shut down
if (!_running)
{
break;
}
// Get the job...
Task task = null;
lock (_queueSync)
{
// Check whether we should shut down
if (!_running)
{
break;
}
if (_queue.Count > 0)
{
task = _queue.Dequeue();
@ -162,10 +163,12 @@ namespace MathNet.Numerics.Threading
{
continue;
}
// ...and run it
task.Compute();
}
_isInWorkerThread = false;
}
/// <summary>

4
src/UnitTests/ThreadingTests/ParallelForTests.cs

@ -108,7 +108,7 @@ namespace MathNet.Numerics.UnitTests.ThreadingTests
}
}
[Test, ApartmentState(ApartmentState.MTA), Timeout(15)]
[Test, MultipleAsserts, ApartmentState(ApartmentState.MTA), Timeout(15)]
public void DoesNotGetConfusedByMultipleStartShutdown()
{
ThreadQueue.Shutdown();
@ -132,8 +132,8 @@ namespace MathNet.Numerics.UnitTests.ThreadingTests
Assert.AreEqual(2, ThreadQueue.ThreadCount);
var items = new int[50];
Parallel.For(0, items.Length, i => items[i]++);
Parallel.For(0, items.Length, i => items[i] += 1000);
ThreadQueue.Shutdown();

Loading…
Cancel
Save