summaryrefslogtreecommitdiff
path: root/components/cplusplus/cpp11/gcc/condition_variable.cpp
diff options
context:
space:
mode:
authorWayne Lin <[email protected]>2021-11-10 16:01:38 +0800
committerWayne Lin <[email protected]>2021-11-10 16:01:38 +0800
commit9b44e57a6022b8eb46eda7037b719ec918fdcc55 (patch)
tree26be9facf0f37d1c38b9e4b6e4abc99d6f8b5a8d /components/cplusplus/cpp11/gcc/condition_variable.cpp
parent37f5236dfa45b98d02e867536a10ac0b6622b80b (diff)
parentfdbaa2a808d12d522ad90702795c08ae8443aab9 (diff)
Merge branch 'master' of https://github.com/RT-Thread/rt-thread into nuvoton
Diffstat (limited to 'components/cplusplus/cpp11/gcc/condition_variable.cpp')
-rw-r--r--components/cplusplus/cpp11/gcc/condition_variable.cpp34
1 files changed, 34 insertions, 0 deletions
diff --git a/components/cplusplus/cpp11/gcc/condition_variable.cpp b/components/cplusplus/cpp11/gcc/condition_variable.cpp
new file mode 100644
index 0000000000..2860dd9161
--- /dev/null
+++ b/components/cplusplus/cpp11/gcc/condition_variable.cpp
@@ -0,0 +1,34 @@
+/*
+ * Copyright (c) 2006-2021, RT-Thread Development Team
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Change Logs:
+ * Date Author Notes
+ * 2021-04-27 flybreak the first version.
+ */
+
+#include "condition_variable"
+
+namespace std
+{
+ void condition_variable::wait(unique_lock<mutex>& lock)
+ {
+ int err = pthread_cond_wait(&_m_cond, lock.mutex()->native_handle());
+
+ if (err)
+ {
+ throw_system_error(err, "condition_variable::wait: failed to wait on a condition");
+ }
+ }
+
+ void notify_all_at_thread_exit(condition_variable& cond, unique_lock<mutex> lk)
+ {
+ // TLS currently not available
+ mutex* mut = lk.release();
+ mut->unlock();
+ cond.notify_all();
+ }
+
+
+} // namespace std