summaryrefslogtreecommitdiff
path: root/components/libc/cplusplus/cpp11/gcc/condition_variable.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'components/libc/cplusplus/cpp11/gcc/condition_variable.cpp')
-rw-r--r--components/libc/cplusplus/cpp11/gcc/condition_variable.cpp34
1 files changed, 34 insertions, 0 deletions
diff --git a/components/libc/cplusplus/cpp11/gcc/condition_variable.cpp b/components/libc/cplusplus/cpp11/gcc/condition_variable.cpp
new file mode 100644
index 0000000000..2860dd9161
--- /dev/null
+++ b/components/libc/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