Posix: pthread_mutex_lock() mit timeout ?!
-
Hallo zusammen,
ich möchte ein Win32 Programm nach Linux portieren. Für die Threadsynchronisierung möchte ich Posix verwenden.
Unter Win32 wird mittels der Funktion WaitForSingleObject() auf die Zuteilung des Mutex gewartet.
Dieser Funktion kann man einen Timeout mitgeben, nachdem sie das Warten auf die Zuteilung des Mutex abbrechen soll.
Die Mutex Funktion pthread_mutex_lock() bietet diese Möglichkeit nicht. Welche Möglichkeit habe dieses Verhalten mittels Posix umzusetzen ?Hier die beide Win32 Methoden die portiert werden müssen:
bool Mutex::lock( const double& waitTime ) const { // Rueckgabewert der WaitForSingleObject( ) Funktion. DWORD returnValue = 0; // Pruefen ob ein Timeout verwendet werden soll. Die WaitForSingleObject( ) Funktion // muss dann mit unterschiedlichen Parametern aufgerufen werden. if( waitTime != 0 ) { returnValue = WaitForSingleObject( m_handle, static_cast<int>( waitTime * 1000.0 ) ); } else { returnValue = WaitForSingleObject( m_handle, INFINITE ); } // Pruefen ob die WaitForSingleObject( ) einen Fehler gemeldet hat. if( returnValue == WAIT_FAILED ) { return false; } return true; } bool Mutex::release( ) const { // Versuchen den Mutex zu releasen. if( ReleaseMutex( m_handle ) == FALSE ) { // Es kann passieren, das versucht wird, einen Mutex zu releasen, der von einem anderen // Thread gelockt wurde. Die ReleaseMutex Funktion schlaegt dann fehl, es darf aber keine // Exception geworfen werden. if( GetLastError( ) != ERROR_NOT_OWNER ) { throw std::exception( "Mutex: ReleaseMutex() failed." ); } return false; } return true; }
-
pthread_mutex_timedlock
Aber ich hab noch nie einen Grund gesehen, diese Funktion zu verwenden.
-
Danke, damit klappt es. So eine Option kann schon sinn machen wenn nur eine ganz bestimmte Zeit auf die Zuteilung einer Resource warten möchte.