Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033 #include <iostream>
00034 #include <errno.h>
00035 #include <stdlib.h>
00036
00037 namespace
00038 cmtk
00039 {
00040
00041 ThreadSemaphore::ThreadSemaphore( const unsigned int initial )
00042 {
00043 if ( sem_init( &this->m_Semaphore, 0, initial ) )
00044 {
00045 std::cerr << "ERROR: sem_init failed with errno=" << errno << "\n";
00046 exit( 1 );
00047 }
00048 }
00049
00050 ThreadSemaphore::~ThreadSemaphore()
00051 {
00052 if ( sem_destroy( &this->m_Semaphore ) )
00053 {
00054 std::cerr << "ERROR: sem_destroy failed with errno=" << errno << "\n";
00055 exit( 1 );
00056 }
00057 }
00058
00059 void
00060 ThreadSemaphore::Post( const unsigned int increment )
00061 {
00062 for ( unsigned int idx = 0; idx < increment; ++idx )
00063 {
00064 if ( sem_post( &this->m_Semaphore ) )
00065 {
00066 std::cerr << "ERROR: sem_post failed with errno=" << errno << "\n";
00067 exit( 1 );
00068 }
00069 }
00070 }
00071
00072 void
00073 ThreadSemaphore::Wait()
00074 {
00075 if ( sem_wait( &this->m_Semaphore ) )
00076 {
00077 std::cerr << "ERROR: sem_wait failed with errno=" << errno << "\n";
00078 exit( 1 );
00079 }
00080 }
00081
00082 }