summaryrefslogtreecommitdiff
path: root/components/cplusplus/cxx_Semaphore.cpp
diff options
context:
space:
mode:
authorBernard Xiong <[email protected]>2021-03-02 15:00:43 +0800
committerGitHub <[email protected]>2021-03-02 15:00:43 +0800
commit2c12493ff342ea9ba808311c3f6835eba31a8d3e (patch)
treeb1e1dfbeaead7c08ab8d7d0f34066154c125841b /components/cplusplus/cxx_Semaphore.cpp
parent5f17cf9204e501d971cd28486e0a7193d2f1fae4 (diff)
parent19871ac32e41590b1f3e3742d9ab023dc3147ba0 (diff)
Merge pull request #4404 from KyleChenjh/lts-v3.1.x
[Update] Sync from v4.0.3
Diffstat (limited to 'components/cplusplus/cxx_Semaphore.cpp')
-rw-r--r--components/cplusplus/cxx_Semaphore.cpp38
1 files changed, 38 insertions, 0 deletions
diff --git a/components/cplusplus/cxx_Semaphore.cpp b/components/cplusplus/cxx_Semaphore.cpp
new file mode 100644
index 0000000000..c977a27c1a
--- /dev/null
+++ b/components/cplusplus/cxx_Semaphore.cpp
@@ -0,0 +1,38 @@
+/*
+ * Copyright (c) 2006-2018, RT-Thread Development Team
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Change Logs:
+ * Date Author Notes
+ */
+#include "Semaphore.h"
+
+using namespace rtthread;
+
+Semaphore::Semaphore(const char *name, int32_t count)
+{
+ rt_sem_init(&mID, name, count, RT_IPC_FLAG_FIFO);
+}
+
+bool Semaphore::wait(int32_t millisec)
+{
+ rt_int32_t tick;
+
+ if (millisec < 0)
+ tick = -1;
+ else
+ tick = rt_tick_from_millisecond(millisec);
+
+ return rt_sem_take(&mID, tick) == RT_EOK;
+}
+
+void Semaphore::release(void)
+{
+ rt_sem_release(&mID);
+}
+
+Semaphore::~Semaphore()
+{
+ rt_sem_detach(&mID);
+}