33 #ifndef SC_HOST_SEMAPHORE_H_INCLUDED_ 34 #define SC_HOST_SEMAPHORE_H_INCLUDED_ 36 #ifndef SC_INCLUDE_WINDOWS_H 37 # define SC_INCLUDE_WINDOWS_H // include Windows.h, if needed 42 #if !defined(WIN32) && !defined(_WIN32) // use POSIX semaphore 43 #include <semaphore.h> 56 #if defined(WIN32) || defined(_WIN32) // use Windows Semaphore 58 typedef HANDLE underlying_type;
60 void do_init(
int init)
62 m_sem = CreateSemaphore( NULL, init, LONG_MAX, NULL );
66 { WaitForSingleObject( m_sem, INFINITE ); }
68 {
return ( WaitForSingleObject( m_sem, 0 ) == WAIT_OBJECT_0 ); }
70 { ReleaseSemaphore( m_sem, 1, NULL ); }
72 { CloseHandle( m_sem ); }
74 #else // use POSIX semaphore 76 typedef sem_t underlying_type;
78 void do_init(
int init) { sem_init( &m_sem, 0, init ); }
79 void do_wait() { sem_wait( &m_sem ); }
80 bool do_trywait() {
return ( sem_trywait( &m_sem ) == 0 ); }
81 void do_post() { sem_post( &m_sem ); }
82 void do_destroy() { sem_close( &m_sem ); }
84 #endif // platform-specific implementation 99 { do_wait();
return 0; }
103 {
return do_trywait() ? 0 : -1; }
107 { do_post();
return 0; }
111 {
sc_assert(
false &&
"not supported on sc_host_semaphore");
return -1; }
114 underlying_type m_sem;
119 #endif // SC_HOST_SEMAPHORE_H_INCLUDED_
The sc_semaphore_if interface class.
sc_host_semaphore(int init=0)
The sc_semaphore_if interface class.
virtual int get_value() const
virtual ~sc_host_semaphore()