Exemplo n.º 1
0
            public WorkQueueLocals(ref WorkStealingQueue <IThreadPoolWorkItem>[] localQueues)
            {
                Random = new FastRandom(Thread.CurrentThread.ManagedThreadId);
                Queue  = new WorkStealingQueue <IThreadPoolWorkItem>();

                WorkStealingQueueList.Add(ref localQueues, Queue);
            }
Exemplo n.º 2
0
            public FastRandom random = new FastRandom(Thread.CurrentThread.ManagedThreadId); // mutable struct, do not copy or make readonly

            public ThreadPoolWorkQueueThreadLocals(ThreadPoolWorkQueue tpq)
            {
                workQueue         = tpq;
                workStealingQueue = new WorkStealingQueue();
                WorkStealingQueueList.Add(workStealingQueue);
                currentThread = Thread.CurrentThread;
            }
Exemplo n.º 3
0
            private void CleanUp()
            {
                if (null != workStealingQueue)
                {
                    if (null != workQueue)
                    {
                        ISpreadsThreadPoolWorkItem cb;
                        while ((cb = workStealingQueue.LocalPop()) != null)
                        {
                            Debug.Assert(null != cb);
                            workQueue.Enqueue(cb, forceGlobal: true);
                        }
                    }

                    WorkStealingQueueList.Remove(workStealingQueue);
                }
            }
Exemplo n.º 4
0
 public void Unregister(ref WorkStealingQueue <IThreadPoolWorkItem>[] localQueues)
 {
     WorkStealingQueueList.Remove(ref localQueues, Queue);
 }