--- /dev/null
+/* Copyright (c) 2019. The SimGrid Team. All rights reserved. */
+
+/* This program is free software; you can redistribute it and/or modify it
+ * under the terms of the license (GNU LGPL) which comes with this package. */
+
+#include <condition_variable>
+#include <mutex>
+
+namespace simgrid {
+namespace xbt {
+class XBT_PUBLIC OsSemaphore {
+public:
+ inline OsSemaphore(unsigned int uiCount) : capa_(uiCount) {}
+
+ inline void acquire()
+ {
+ std::unique_lock<std::mutex> lock(mutex_);
+ condition_.wait(lock, [&]() -> bool { return capa_ > 0; });
+ --capa_;
+ }
+
+ inline void release()
+ {
+ std::unique_lock<std::mutex> lock(mutex_);
+ ++capa_;
+ condition_.notify_one();
+ }
+
+private:
+ unsigned int capa_;
+ std::mutex mutex_;
+ std::condition_variable condition_;
+};
+} // namespace xbt
+} // namespace simgrid
+++ /dev/null
-/* Copyright (c) 2010-2018. The SimGrid Team.
- * All rights reserved. */
-
-/* This program is free software; you can redistribute it and/or modify it
- * under the terms of the license (GNU LGPL) which comes with this package. */
-
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-#include <semaphore.h>
-
-int main(void)
-{
- sem_t s;
- if (sem_init(&s, 0, 0) != 0)
- return 1;
- return 0;
-}
+++ /dev/null
-/* Copyright (c) 2010-2018. The SimGrid Team.
- * All rights reserved. */
-
-/* This program is free software; you can redistribute it and/or modify it
- * under the terms of the license (GNU LGPL) which comes with this package. */
-
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-#include <semaphore.h>
-#include <stdio.h>
-
-#ifndef SEM_FAILED
-#define SEM_FAILED (-1)
-#endif
-
-int main(void) {
-#ifdef WIN32
- int s;
-#else
- sem_t * s;
-#endif
- s = sem_open("/0", O_CREAT, 0644, 10);
- if (s == SEM_FAILED){
-// printf("sem_open failed\n");
- return 1;
- }
-// printf("sem_open succeeded\n");
- return 0;
-}