smartthreadpool: replace custom linkedlist based quueue by .net queue
This commit is contained in:
11
ThirdParty/SmartThreadPool/PriorityQueue.cs
vendored
11
ThirdParty/SmartThreadPool/PriorityQueue.cs
vendored
@@ -23,7 +23,7 @@ namespace Amib.Threading.Internal
|
||||
/// <summary>
|
||||
/// Work items queues. There is one for each type of priority
|
||||
/// </summary>
|
||||
private readonly LinkedList<IHasWorkItemPriority>[] _queues = new LinkedList<IHasWorkItemPriority>[_queuesCount];
|
||||
private readonly Queue<IHasWorkItemPriority>[] _queues = new Queue<IHasWorkItemPriority>[_queuesCount];
|
||||
|
||||
/// <summary>
|
||||
/// The total number of work items within the queues
|
||||
@@ -43,7 +43,7 @@ namespace Amib.Threading.Internal
|
||||
{
|
||||
for(int i = 0; i < _queues.Length; ++i)
|
||||
{
|
||||
_queues[i] = new LinkedList<IHasWorkItemPriority>();
|
||||
_queues[i] = new Queue<IHasWorkItemPriority>();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -63,7 +63,7 @@ namespace Amib.Threading.Internal
|
||||
Debug.Assert(queueIndex >= 0);
|
||||
Debug.Assert(queueIndex < _queuesCount);
|
||||
|
||||
_queues[queueIndex].AddLast(workItem);
|
||||
_queues[queueIndex].Enqueue(workItem);
|
||||
++_workItemsCount;
|
||||
++_version;
|
||||
}
|
||||
@@ -80,8 +80,7 @@ namespace Amib.Threading.Internal
|
||||
{
|
||||
int queueIndex = GetNextNonEmptyQueue(-1);
|
||||
Debug.Assert(queueIndex >= 0);
|
||||
workItem = _queues[queueIndex].First.Value;
|
||||
_queues[queueIndex].RemoveFirst();
|
||||
workItem = _queues[queueIndex].Dequeue();
|
||||
Debug.Assert(null != workItem);
|
||||
--_workItemsCount;
|
||||
++_version;
|
||||
@@ -127,7 +126,7 @@ namespace Amib.Threading.Internal
|
||||
{
|
||||
if (_workItemsCount > 0)
|
||||
{
|
||||
foreach(LinkedList<IHasWorkItemPriority> queue in _queues)
|
||||
foreach(Queue<IHasWorkItemPriority> queue in _queues)
|
||||
{
|
||||
queue.Clear();
|
||||
}
|
||||
|
||||
13
ThirdParty/SmartThreadPool/WorkItemsQueue.cs
vendored
13
ThirdParty/SmartThreadPool/WorkItemsQueue.cs
vendored
@@ -143,9 +143,7 @@ namespace Amib.Threading.Internal
|
||||
/// <param name="millisecondsTimeout">Timeout in milliseconds</param>
|
||||
/// <param name="cancelEvent">Cancel wait handle</param>
|
||||
/// <returns>Returns true if the resource was granted</returns>
|
||||
public WorkItem DequeueWorkItem(
|
||||
int millisecondsTimeout,
|
||||
WaitHandle cancelEvent)
|
||||
public WorkItem DequeueWorkItem( int millisecondsTimeout, WaitHandle cancelEvent)
|
||||
{
|
||||
// This method cause the caller to wait for a work item.
|
||||
// If there is at least one waiting work item then the
|
||||
@@ -182,9 +180,7 @@ namespace Amib.Threading.Internal
|
||||
}
|
||||
|
||||
// Prepare array of wait handle for the WaitHandle.WaitAny()
|
||||
WaitHandle[] waitHandles = new WaitHandle[] {
|
||||
waiterEntry.WaitHandle,
|
||||
cancelEvent };
|
||||
WaitHandle[] waitHandles = new WaitHandle[] { waiterEntry.WaitHandle, cancelEvent };
|
||||
|
||||
// Wait for an available resource, cancel event, or timeout.
|
||||
|
||||
@@ -193,10 +189,7 @@ namespace Amib.Threading.Internal
|
||||
// It just doesn't work, I don't know why, so I have two lock(this)
|
||||
// statments instead of one.
|
||||
|
||||
int index = STPEventWaitHandle.WaitAny(
|
||||
waitHandles,
|
||||
millisecondsTimeout,
|
||||
true);
|
||||
int index = STPEventWaitHandle.WaitAny( waitHandles, millisecondsTimeout, true);
|
||||
|
||||
lock (this)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user