Mercurial > pub > ImplabNet
comparison Implab/Parallels/WorkerPool.cs @ 34:dabf79fde388
fixed race condition in DispatchPool
| author | cin |
|---|---|
| date | Thu, 10 Apr 2014 04:20:25 +0400 |
| parents | 6a56df4ec59e |
| children | 2880242f987a |
comparison
equal
deleted
inserted
replaced
| 33:b255e4aeef17 | 34:dabf79fde388 |
|---|---|
| 67 return true; | 67 return true; |
| 68 } | 68 } |
| 69 return false; | 69 return false; |
| 70 } | 70 } |
| 71 | 71 |
| 72 protected override bool Suspend() { | |
| 73 // This override solves race condition | |
| 74 // WORKER CLIENT | |
| 75 // --------------------------------------- | |
| 76 // TryDeque == false | |
| 77 // Enqueue(unit), queueLen++ | |
| 78 // GrowPool? == NO | |
| 79 // ActiveThreads-- | |
| 80 // Suspend | |
| 81 // queueLength > 0 | |
| 82 // continue | |
| 83 if (m_queueLength > 0) | |
| 84 return true; | |
| 85 return base.Suspend(); | |
| 86 } | |
| 87 | |
| 72 protected override void InvokeUnit(Action unit) { | 88 protected override void InvokeUnit(Action unit) { |
| 73 unit(); | 89 unit(); |
| 74 } | 90 } |
| 75 | 91 |
| 76 } | 92 } |
