Fix comments
[mono.git] / mcs / class / corlib / System.Threading / SpinWait.cs
index 59632fc091fd25fc038d3326005a34892ae03a7f..136836746cc87e830c772e23c310ae1c822f0600 100644 (file)
@@ -1,4 +1,3 @@
-#if NET_4_0 || BOOTSTRAP_NET_4_0
 // SpinWait.cs
 //
 // Copyright (c) 2008 Jérémie "Garuma" Laval
@@ -23,6 +22,7 @@
 //
 //
 
+#if NET_4_0
 using System;
 
 namespace System.Threading
@@ -30,45 +30,47 @@ namespace System.Threading
        public struct SpinWait
        {
                // The number of step until SpinOnce yield on multicore machine
-               const           int  step = 5;
-               const           int  maxTime = 50;
+               const           int  step = 10;
+               const           int  maxTime = 200;
                static readonly bool isSingleCpu = (Environment.ProcessorCount == 1);
 
                int ntime;
 
                public void SpinOnce ()
                {
+                       ntime += 1;
+
                        if (isSingleCpu) {
                                // On a single-CPU system, spinning does no good
                                Thread.Yield ();
                        } else {
-                               if ((ntime = ntime == maxTime ? maxTime : ntime + 1) % step == 0)
+                               if (ntime % step == 0)
                                        Thread.Yield ();
                                else
                                        // Multi-CPU system might be hyper-threaded, let other thread run
-                                       Thread.SpinWait (ntime << 1);
+                                       Thread.SpinWait (Math.Min (ntime, maxTime) << 1);
                        }
                }
 
-               public static void SpinUntil (Func<bool> predicate)
+               public static void SpinUntil (Func<bool> condition)
                {
                        SpinWait sw = new SpinWait ();
-                       while (!predicate ())
+                       while (!condition ())
                                sw.SpinOnce ();
                }
 
-               public static bool SpinUntil (Func<bool> predicate, TimeSpan ts)
+               public static bool SpinUntil (Func<bool> condition, TimeSpan timeout)
                {
-                       return SpinUntil (predicate, (int)ts.TotalMilliseconds);
+                       return SpinUntil (condition, (int)timeout.TotalMilliseconds);
                }
 
-               public static bool SpinUntil (Func<bool> predicate, int milliseconds)
+               public static bool SpinUntil (Func<bool> condition, int millisecondsTimeout)
                {
                        SpinWait sw = new SpinWait ();
                        Watch watch = Watch.StartNew ();
 
-                       while (!predicate ()) {
-                               if (watch.ElapsedMilliseconds > milliseconds)
+                       while (!condition ()) {
+                               if (watch.ElapsedMilliseconds > millisecondsTimeout)
                                        return false;
                                sw.SpinOnce ();
                        }