While examining our 10,10,10 issue I discovered that several threads were locked with each other in an unusual place; I've moved the piece of code inside a lock[] context and so far it's looking promising.
parent
eb5a95d26b
commit
ae7c30a0f3
|
@ -535,17 +535,10 @@ namespace Amib.Threading
|
||||||
// Process until shutdown.
|
// Process until shutdown.
|
||||||
while(!_shutdown)
|
while(!_shutdown)
|
||||||
{
|
{
|
||||||
// Update the last time this thread was seen alive.
|
|
||||||
// It's good for debugging.
|
|
||||||
_workerThreads[Thread.CurrentThread] = DateTime.Now;
|
|
||||||
|
|
||||||
// Wait for a work item, shutdown, or timeout
|
// Wait for a work item, shutdown, or timeout
|
||||||
WorkItem workItem = Dequeue();
|
WorkItem workItem = Dequeue();
|
||||||
|
|
||||||
// Update the last time this thread was seen alive.
|
|
||||||
// It's good for debugging.
|
|
||||||
_workerThreads[Thread.CurrentThread] = DateTime.Now;
|
|
||||||
|
|
||||||
// On timeout or shut down.
|
// On timeout or shut down.
|
||||||
if (null == workItem)
|
if (null == workItem)
|
||||||
{
|
{
|
||||||
|
@ -554,6 +547,10 @@ namespace Amib.Threading
|
||||||
{
|
{
|
||||||
lock(_workerThreads.SyncRoot)
|
lock(_workerThreads.SyncRoot)
|
||||||
{
|
{
|
||||||
|
// Update the last time this thread was seen alive.
|
||||||
|
// It's good for debugging.
|
||||||
|
_workerThreads[Thread.CurrentThread] = DateTime.Now;
|
||||||
|
|
||||||
if (_workerThreads.Count > _stpStartInfo.MinWorkerThreads)
|
if (_workerThreads.Count > _stpStartInfo.MinWorkerThreads)
|
||||||
{
|
{
|
||||||
// Inform that the thread is quiting and then quit.
|
// Inform that the thread is quiting and then quit.
|
||||||
|
|
Loading…
Reference in New Issue