summaryrefslogtreecommitdiff
path: root/components/libc/cplusplus/cxx_Mutex.cpp
diff options
context:
space:
mode:
authorMan, Jianting (Meco) <[email protected]>2022-03-25 11:07:18 -0400
committerGitHub <[email protected]>2022-03-25 23:07:18 +0800
commita514b3bd16e4f21202cc001d9294ac2c2f206c3d (patch)
treeb7663d60d1a5a8f34a83b3ee3625b6c97097718a /components/libc/cplusplus/cxx_Mutex.cpp
parent851d16b18f0448ee83e069edd5aaa3998e00e284 (diff)
[components][kconfig] 整理Kconfig目录名称和结构 (#5698)
Diffstat (limited to 'components/libc/cplusplus/cxx_Mutex.cpp')
-rw-r--r--components/libc/cplusplus/cxx_Mutex.cpp44
1 files changed, 44 insertions, 0 deletions
diff --git a/components/libc/cplusplus/cxx_Mutex.cpp b/components/libc/cplusplus/cxx_Mutex.cpp
new file mode 100644
index 0000000000..da6f80985f
--- /dev/null
+++ b/components/libc/cplusplus/cxx_Mutex.cpp
@@ -0,0 +1,44 @@
+/*
+ * Copyright (c) 2006-2021, RT-Thread Development Team
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Change Logs:
+ * Date Author Notes
+ */
+
+#include "cxx_mutex.h"
+
+using namespace rtthread;
+
+Mutex::Mutex(const char *name)
+{
+ rt_mutex_init(&mID, name, RT_IPC_FLAG_PRIO);
+}
+
+bool Mutex::lock(int32_t millisec)
+{
+ rt_int32_t tick;
+
+ if (millisec < 0)
+ tick = -1;
+ else
+ tick = rt_tick_from_millisecond(millisec);
+
+ return rt_mutex_take(&mID, tick) == RT_EOK;
+}
+
+bool Mutex::trylock()
+{
+ return lock(0);
+}
+
+void Mutex::unlock()
+{
+ rt_mutex_release(&mID);
+}
+
+Mutex::~Mutex()
+{
+ rt_mutex_detach(&mID);
+}