Allow to disable spinlocks
authorMarco Costalba <mcostalba@gmail.com>
Sun, 1 Mar 2015 16:12:09 +0000 (17:12 +0100)
committerMarco Costalba <mcostalba@gmail.com>
Sun, 1 Mar 2015 16:16:05 +0000 (17:16 +0100)
And use mutex instead. You may never want to do this.
It is a workaround to run c++11 on fishtest where many
machiens have HTenabled and this can be a problem when
number of cores set is higher than number of physical cores.

To disable spinlocks, just compile with -DNO_SPINLOCK flag

No functional change.

src/thread.h
src/types.h

index b6809f4e37221dcca2329b62980f07a7e42c5238..a639cf7ea051e143782fc206212256aa8b2e248a 100644 (file)
@@ -39,7 +39,7 @@ const size_t MAX_THREADS = 128;
 const size_t MAX_SPLITPOINTS_PER_THREAD = 8;
 const size_t MAX_SLAVES_PER_SPLITPOINT = 4;
 
-
+#if !defined(NO_SPINLOCK)
 /// Spinlock class wraps low level atomic operations to provide a spin lock
 
 class Spinlock {
@@ -55,6 +55,18 @@ public:
   void release() { lock.store(1, std::memory_order_release); }
 };
 
+#else
+
+class Spinlock {
+
+  std::mutex mutex;
+
+public:
+  void acquire() { mutex.lock(); }
+  void release() { mutex.unlock(); }
+};
+
+#endif
 
 /// SplitPoint struct stores information shared by the threads searching in
 /// parallel below the same split point. It is populated at splitting time.
index eebd69e506c2cb19bd9f2390056dad41a2d383e1..c8078546775d20ae49079317cc520b3e9545dc4f 100644 (file)
@@ -31,6 +31,9 @@
 /// -DNO_PREFETCH | Disable use of prefetch asm-instruction. You may need this to
 ///               | run on some very old machines.
 ///
+/// -DNO_SPINLOCK | Use mutex instead of spinlocks. This is much slower, so you
+///               | really don't want to do this in general case.
+///
 /// -DUSE_POPCNT  | Add runtime support for use of popcnt asm-instruction. Works
 ///               | only in 64-bit mode and requires hardware with popcnt support.
 ///