00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00034
#if !defined( _THREADS_1__POSIX__COND_VAR_HPP_ )
00035
#define _THREADS_1__POSIX__COND_VAR_HPP_
00036
00037
#include <unistd.h>
00038
#include <pthread.h>
00039
00040
#include <cpp_util_2/h/nocopy.hpp>
00041
00042
#include <threads_1/h/threads.hpp>
00043
00044
#include <threads_1/posix/h/mutex_sem.hpp>
00045
00046
namespace threads_1
00047 {
00048
00052 class _os_cond_var_t :
00053
public cpp_util_2::nocopy_t
00054 {
00055
private :
00057 pthread_cond_t
m_event;
00058
00059
public :
00060
inline
00061
_os_cond_var_t()
00062 {
00063 pthread_cond_t initial = PTHREAD_COND_INITIALIZER;
00064
m_event = initial;
00065 }
00066
inline
00067 ~
_os_cond_var_t()
00068 {
00069 pthread_cond_destroy( &m_event );
00070 }
00071
00073
inline void
00074 wait(
_os_mutex_sem_t & mutex )
00075 {
00076 pthread_cond_wait( &
m_event,
00077 &mutex.
m_mutex_struct );
00078 }
00079
00081
inline void
00082 notify_one()
00083 {
00084 pthread_cond_signal( &
m_event );
00085 }
00086
00088
inline void
00089 notify_all()
00090 {
00091 pthread_cond_broadcast( &
m_event );
00092 }
00093 };
00094
00095 }
00096
00097
#endif