Browse Source

threading: fixed shutdown bug.

la-knuth
Marcus Cuda 17 years ago
parent
commit
a78f202b2c
  1. 11
      src/Numerics/Threading/ThreadQueue.cs
  2. 4
      src/UnitTests/ThreadingTests/ParallelForTests.cs

11
src/Numerics/Threading/ThreadQueue.cs

@ -137,6 +137,11 @@ namespace MathNet.Numerics.Threading
_isInWorkerThread = true; _isInWorkerThread = true;
while (_running) while (_running)
{
// Get the job...
Task task = null;
lock (_queueSync)
{ {
// Check whether we should shut down // Check whether we should shut down
if (!_running) if (!_running)
@ -144,10 +149,6 @@ namespace MathNet.Numerics.Threading
break; break;
} }
// Get the job...
Task task = null;
lock (_queueSync)
{
if (_queue.Count > 0) if (_queue.Count > 0)
{ {
task = _queue.Dequeue(); task = _queue.Dequeue();
@ -166,6 +167,8 @@ namespace MathNet.Numerics.Threading
// ...and run it // ...and run it
task.Compute(); task.Compute();
} }
_isInWorkerThread = false;
} }
/// <summary> /// <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() public void DoesNotGetConfusedByMultipleStartShutdown()
{ {
ThreadQueue.Shutdown(); ThreadQueue.Shutdown();
@ -132,8 +132,8 @@ namespace MathNet.Numerics.UnitTests.ThreadingTests
Assert.AreEqual(2, ThreadQueue.ThreadCount); Assert.AreEqual(2, ThreadQueue.ThreadCount);
var items = new int[50]; var items = new int[50];
Parallel.For(0, items.Length, i => items[i]++); Parallel.For(0, items.Length, i => items[i]++);
Parallel.For(0, items.Length, i => items[i] += 1000); Parallel.For(0, items.Length, i => items[i] += 1000);
ThreadQueue.Shutdown(); ThreadQueue.Shutdown();

Loading…
Cancel
Save