Index: src/Latch.h
===================================================================
new file mode 100644
--- /dev/null
+++ b/src/Latch.h
@@ -0,0 +1,96 @@
+/*
+ * This file is part of Adblock Plus <https://adblockplus.org/>,
+ * Copyright (C) 2006-2016 Eyeo GmbH
+ *
+ * Adblock Plus is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 3 as
+ * published by the Free Software Foundation.
+ *
+ * Adblock Plus is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Adblock Plus.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#if !defined(LATCH_H)
+#define LATCH_H
+
+#include <condition_variable>
+#include <mutex>
+#include <stdexcept>
+
+/**
+ * Latch class mimicking the concept in C++ Concurrency TS.
+ * Only some of the member functions are implemented.
+ *
+ * \par Reference
+ * - N3998 C++ Latches and Barriers
+ *   http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n3998.html
+ */
+class Latch
+{
+  /** 
+   * Internal count.
+   * 
+   * The synchronization condition is that \c count is zero.
+   */
+  int count;
+
+  /**
+   * Mutex protecting the integrity of the count.
+   * This mutex is only used transiently.
+   */
+  std::mutex m;
+
+  typedef std::unique_lock<std::mutex> UniqueLockType;
+
+  /**
+   * Condition variable blocking for Wait().
+   *
+   * \par Invariant
+   * - If the synchronization condition has not been met, mutexBlocking is locked.
+   */
+  std::condition_variable cv;
+
+  bool synchronizationCondition() const
+  {
+    return count == 0;
+  }
+
+public:
+  /**
+   * Initializes the latch with a count of 'initialCount'.
+   */
+  Latch(int initialCount)
+    : count(initialCount)
+  {}
+
+  /**
+   * \par Precondition
+   * - No threads are blocked at the synchronization point.
+   */
+  ~Latch() {};
+
+  /**
+   * Decrements the internal count by 1.
+   * If the count reaches 0 the synchronization condition is reached.
+   */
+  void Arrive();
+
+  /**
+   * Blocks the calling thread at the synchronization point
+   *   until the synchronization condition is reached. 
+   * If the condition has already been reached,  the thread does not block.
+   */
+  void Wait();
+
+  /**
+   * Return the current value of the synchroniztion condition.
+   */
+  bool TryWait();
+};
+
+#endif
