//////////////////////////////////////////////////////////////////////////// // CSemaphore クラスのインプリメンテーション // //////////////////////////////////////////////////////////////////////////// #include #include #include #include #include "Semaphore.h" //////////////////////////////////////////////////////////////////////////// // 構築/破棄 //////////////////////////////////////////////////////////////////////////// // セマフォを構築する CSemaphore::CSemaphore() { #if defined( _WIN32 ) m_Semaphore = CreateSemaphore( NULL, 1, 100000, NULL ); #else sem_init( &m_Semaphore, 0, 1 ); #endif } // セマフォを破棄する CSemaphore::~CSemaphore() { #if defined( _WIN32 ) CloseHandle( m_Semaphore ); #else sem_destroy( &m_Semaphore ); #endif } //////////////////////////////////////////////////////////////////////////// // メソッド //////////////////////////////////////////////////////////////////////////// // P操作 void CSemaphore::P() { #if defined( _WIN32 ) WaitForSingleObject( m_Semaphore, INFINITE ); #else sem_wait( &m_Semaphore ); #endif } // V操作 void CSemaphore::V() { #if defined( _WIN32 ) ReleaseSemaphore( m_Semaphore, 1, NULL ); #else sem_post( &m_Semaphore ); #endif }