Преглед изворни кода

Internal ThreadWorker deque creation is now delegated to the scheduler.

Looking into exporting ThreadWorker to Mono.Parallel
Jérémie Laval пре 15 година
родитељ
комит
e524cfd9e1

+ 2 - 6
mcs/class/corlib/System.Threading.Tasks/Scheduler.cs

@@ -46,7 +46,7 @@ namespace System.Threading.Tasks
 			workers = new ThreadWorker [maxWorker];
 			
 			for (int i = 0; i < maxWorker; i++) {
-				workers [i] = new ThreadWorker (this, workers, i, workQueue, priority, pulseHandle);
+				workers [i] = new ThreadWorker (this, workers, i, workQueue, new CyclicDeque<Task> (), priority, pulseHandle);
 				workers [i].Pulse ();
 			}
 		}
@@ -85,12 +85,8 @@ namespace System.Threading.Tasks
 			return isFromPredicate;
 		}
 		
-		// Called with Task.WaitAll(someTasks) or Task.WaitAny(someTasks) so that we can remove ourselves
-		// also when our wait condition is ok
-		public void ParticipateUntilInternal (Task self, ManualResetEventSlim evt, int millisecondsTimeout)
+		internal void ParticipateUntilInternal (Task self, ManualResetEventSlim evt, int millisecondsTimeout)
 		{
-			if (millisecondsTimeout == -1)
-				millisecondsTimeout = int.MaxValue;
 			ThreadWorker.WorkerMethod (self, evt, millisecondsTimeout, workQueue, workers, pulseHandle);
 		}
 

+ 2 - 1
mcs/class/corlib/System.Threading.Tasks/ThreadWorker.cs

@@ -61,11 +61,12 @@ namespace System.Threading.Tasks
 		                     ThreadWorker[] others,
 		                     int workerPosition,
 		                     IProducerConsumerCollection<Task> sharedWorkQueue,
+		                     IConcurrentDeque<Task> dDeque,
 		                     ThreadPriority priority,
 		                     ManualResetEvent handle)
 		{
 			this.others          = others;
-			this.dDeque          = new CyclicDeque<Task> ();
+			this.dDeque          = dDeque;
 			this.sched           = sched;
 			this.sharedWorkQueue = sharedWorkQueue;
 			this.workerLength    = others.Length;