summaryrefslogtreecommitdiff
path: root/test/semaphore.h
diff options
context:
space:
mode:
authorDan Goodliffe <dan@randomdan.homeip.net>2021-07-31 17:14:21 +0100
committerDan Goodliffe <dan@randomdan.homeip.net>2021-07-31 17:14:21 +0100
commit6b9fdc6ad3ac84cf8b8543b6e46b0ca8c4d61860 (patch)
tree1152b920b5b6481f9b4a9d31927ece6de658f93b /test/semaphore.h
parentbefore and afterEvents virtual/protected (diff)
downloadmygrate-6b9fdc6ad3ac84cf8b8543b6e46b0ca8c4d61860.tar.bz2
mygrate-6b9fdc6ad3ac84cf8b8543b6e46b0ca8c4d61860.tar.xz
mygrate-6b9fdc6ad3ac84cf8b8543b6e46b0ca8c4d61860.zip
Build a basic hacky semaphore for compilers that don't support std::binary_semaphore yet
Diffstat (limited to 'test/semaphore.h')
-rw-r--r--test/semaphore.h27
1 files changed, 27 insertions, 0 deletions
diff --git a/test/semaphore.h b/test/semaphore.h
new file mode 100644
index 0000000..f2e9355
--- /dev/null
+++ b/test/semaphore.h
@@ -0,0 +1,27 @@
+#ifndef MYGRATE_TEST_SEMAPHORE_H
+#define MYGRATE_TEST_SEMAPHORE_H
+
+#if __has_include(<semaphore>)
+# include <semaphore>
+#endif
+
+#ifdef __cpp_lib_semaphore
+using semaphore = std::binary_semaphore;
+#else
+# include <mutex>
+class semaphore {
+public:
+ semaphore(unsigned int v_);
+
+ void release(unsigned int n = 1);
+
+ void acquire();
+
+private:
+ bool try_dec();
+ unsigned int v;
+ std::mutex m;
+};
+#endif
+
+#endif