summaryrefslogtreecommitdiffstats
path: root/libstdc++-v3/include/std/condition_variable
diff options
context:
space:
mode:
authorbkoz <bkoz@138bc75d-0d04-0410-961f-82ee72b054a4>2008-05-06 21:11:47 +0000
committerbkoz <bkoz@138bc75d-0d04-0410-961f-82ee72b054a4>2008-05-06 21:11:47 +0000
commit057bae2ca91ff2274548890ee80c57edafabeb8c (patch)
treecd392e25499481feab8d9adb71f2fb0e3a793cbe /libstdc++-v3/include/std/condition_variable
parentc32f863c6f5117dac6c06d25b4d6422f589b1165 (diff)
downloadppe42-gcc-057bae2ca91ff2274548890ee80c57edafabeb8c.tar.gz
ppe42-gcc-057bae2ca91ff2274548890ee80c57edafabeb8c.zip
2008-05-06 Benjamin Kosnik <bkoz@redhat.com>
* include/std/condition_variable: New. * include/std/mutex: New. * src/condition_variable.cc: New. * src/mutex.cc: New. * include/bits/functexcept.h: Add __throw_system_error varients. * src/functexcept.cc: Same. * config/abi/pre/gnu.ver: Add exports. * doc/xml/manual/using.xml: Add new includes. * doc/doxygen/user.cfg.in: Doxygen support. * doc/doxygen/doxygroups.cc: Same. * include/Makefile.am: Add mutex, condition_variable. * include/Makefile.in: Regenerated. * src/Makefile.am: Add mutex.cc, condition_variable.cc. * src/Makefile.in: Regenerated. * testsuite/30_threads: New. * testsuite/30_threads/lock_error: New. * testsuite/30_threads/mutex: New. * testsuite/30_threads/mutex/dest: New. * testsuite/30_threads/mutex/dest/destructor_locked.cc: New. * testsuite/30_threads/mutex/native_handle: New. * testsuite/30_threads/mutex/native_handle/1.cc: New. * testsuite/30_threads/mutex/cons: New. * testsuite/30_threads/mutex/cons/assign_neg.cc: New. * testsuite/30_threads/mutex/cons/1.cc: New. * testsuite/30_threads/mutex/cons/copy_neg.cc: New. * testsuite/30_threads/mutex/requirements: New. * testsuite/30_threads/mutex/requirements/typedefs.cc: New. * testsuite/30_threads/mutex/try_lock: New. * testsuite/30_threads/mutex/try_lock/1.cc: New. * testsuite/30_threads/mutex/try_lock/2.cc: New. * testsuite/30_threads/mutex/lock: New. * testsuite/30_threads/mutex/lock/1.cc: New. * testsuite/30_threads/mutex/unlock: New. * testsuite/30_threads/mutex/unlock/1.cc: New. * testsuite/30_threads/recursive_mutex: New. * testsuite/30_threads/recursive_mutex/dest: New. * testsuite/30_threads/recursive_mutex/dest/destructor_locked.cc: New. * testsuite/30_threads/recursive_mutex/native_handle: New. * testsuite/30_threads/recursive_mutex/native_handle/1.cc: New. * testsuite/30_threads/recursive_mutex/cons: New. * testsuite/30_threads/recursive_mutex/cons/assign_neg.cc: New. * testsuite/30_threads/recursive_mutex/cons/1.cc: New. * testsuite/30_threads/recursive_mutex/cons/copy_neg.cc: New. * testsuite/30_threads/recursive_mutex/requirements: New. * testsuite/30_threads/recursive_mutex/requirements/typedefs.cc: New. * testsuite/30_threads/lock_guard: New. * testsuite/30_threads/lock_guard/requirements: New. * testsuite/30_threads/lock_guard/requirements/typedefs.cc: New. * testsuite/30_threads/lock_guard/requirements/ explicit_instantiation.cc: New. * testsuite/30_threads/headers: New. * testsuite/30_threads/headers/mutex: New. * testsuite/30_threads/headers/mutex/types_std_c++0x.cc: New. * testsuite/30_threads/headers/mutex/std_c++0x_neg.cc: New. * testsuite/30_threads/headers/condition_variable: New. * testsuite/30_threads/headers/condition_variable/ types_std_c++0x.cc: New. * testsuite/30_threads/headers/condition_variable/std_c++0x_neg.cc: New. * testsuite/30_threads/once_flag: New. * testsuite/30_threads/unique_lock: New. * testsuite/30_threads/unique_lock/requirements: New. * testsuite/30_threads/unique_lock/requirements/typedefs.cc: New. * testsuite/30_threads/unique_lock/requirements/ explicit_instantiation.cc: New. * testsuite/17_intro/headers/c++200x/all.cc: Add new includes. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@135007 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libstdc++-v3/include/std/condition_variable')
-rw-r--r--libstdc++-v3/include/std/condition_variable162
1 files changed, 162 insertions, 0 deletions
diff --git a/libstdc++-v3/include/std/condition_variable b/libstdc++-v3/include/std/condition_variable
new file mode 100644
index 00000000000..c8d8f7845e4
--- /dev/null
+++ b/libstdc++-v3/include/std/condition_variable
@@ -0,0 +1,162 @@
+// <condition_variable> -*- C++ -*-
+
+// Copyright (C) 2008 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with this library; see the file COPYING. If not, write to
+// the Free Software Foundation, 51 Franklin Street, Fifth Floor,
+// Boston, MA 02110-1301, USA.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file does not by itself cause the resulting executable to be covered by
+// the GNU General Public License. This exception does not however
+// invalidate any other reasons why the executable file might be covered by
+// the GNU General Public License.
+
+/** @file condition_variable
+ * This is a Standard C++ Library header.
+ */
+
+#ifndef _GLIBCXX_CONDITION_VARIABLE
+#define _GLIBCXX_CONDITION_VARIABLE 1
+
+#pragma GCC system_header
+
+#ifndef __GXX_EXPERIMENTAL_CXX0X__
+# include <c++0x_warning.h>
+#endif
+
+#include <mutex> // unique_lock
+
+namespace std
+{
+ // XXX
+ class system_time;
+
+ /// condition_variable
+ class condition_variable
+ {
+ public:
+
+#if __GTHREAD_HAS_COND
+ typedef __gthread_cond_t native_handle_type;
+#else
+ typedef int native_handle_type;
+#endif
+
+ condition_variable();
+ ~condition_variable();
+
+ void
+ notify_one();
+
+ void
+ notify_all();
+
+ void
+ wait(unique_lock<mutex>& __lock);
+
+ template<typename _Predicate>
+ void
+ wait(unique_lock<mutex>& __lock, _Predicate __p)
+ {
+ while (!__p())
+ wait(__lock);
+ }
+
+ template<typename _Duration>
+ bool
+ timed_wait(unique_lock<mutex>& __lock, const _Duration& __rtime);
+
+ bool
+ timed_wait(unique_lock<mutex>& __lock, const system_time& __atime);
+
+ template<typename _Predicate>
+ bool
+ timed_wait(unique_lock<mutex>& __lock, const system_time& __atime,
+ _Predicate pred);
+
+ template<typename _Duration, typename _Predicate>
+ bool
+ timed_wait(unique_lock<mutex>& __lock, const _Duration& __rtime,
+ _Predicate pred);
+
+ native_handle_type
+ native_handle() { return _M_cond; }
+
+ private:
+ native_handle_type _M_cond;
+ condition_variable(const condition_variable&);
+ condition_variable& operator=(const condition_variable&);
+ };
+
+ /// condition_variable_any
+ // Like above, only mutex may not have try_lock.
+ class condition_variable_any
+ {
+ public:
+#if __GTHREAD_HAS_COND
+ typedef __gthread_cond_t native_handle_type;
+#else
+ typedef int native_handle_type;
+#endif
+
+ condition_variable_any();
+ ~condition_variable_any();
+
+ void
+ notify_one();
+
+ void
+ notify_all();
+
+ template<typename _Lock>
+ void
+ wait(_Lock& __lock);
+
+ template<typename _Lock, typename _Predicate>
+ void
+ wait(_Lock& __lock, _Predicate __p);
+
+ template<typename _Lock>
+ bool
+ timed_wait(_Lock& __lock, const system_time& __atime);
+
+ template<typename _Lock, typename _Duration>
+ bool
+ timed_wait(_Lock& __lock, const _Duration& __rtime);
+
+ template<typename _Lock, typename _Predicate>
+ bool
+ timed_wait(_Lock& __lock, const system_time& __atime, _Predicate __p);
+
+ template<typename _Lock, typename _Duration, typename _Predicate>
+ bool
+ timed_wait(_Lock& __lock, const _Duration& __rtime, _Predicate __p);
+
+ native_handle_type
+ native_handle() { return _M_cond; }
+
+ private:
+ native_handle_type _M_cond;
+ condition_variable_any(const condition_variable_any&);
+ condition_variable_any& operator=(const condition_variable_any&);
+ };
+
+}
+
+#endif
OpenPOWER on IntegriCloud