1
0
Fork 0
mirror of https://github.com/ossrs/srs.git synced 2025-03-09 15:49:59 +00:00

Thread: Refine SrsThreadMutex and SrsThreadLocker.

This commit is contained in:
winlin 2022-06-28 20:50:25 +08:00
parent 339d3b31cc
commit cb6a4d0143
4 changed files with 56 additions and 41 deletions

View file

@ -428,38 +428,43 @@ srs_error_t srs_thread_initialize()
return err;
}
SrsMutex::SrsMutex()
SrsThreadMutex::SrsThreadMutex()
{
int rc = pthread_mutex_init(&mutex_, NULL);
srs_assert(!rc);
// https://man7.org/linux/man-pages/man3/pthread_mutexattr_init.3.html
int r0 = pthread_mutexattr_init(&attr_);
srs_assert(!r0);
// https://man7.org/linux/man-pages/man3/pthread_mutexattr_gettype.3p.html
r0 = pthread_mutexattr_settype(&attr_, PTHREAD_MUTEX_ERRORCHECK);
srs_assert(!r0);
// https://michaelkerrisk.com/linux/man-pages/man3/pthread_mutex_init.3p.html
r0 = pthread_mutex_init(&lock_, &attr_);
srs_assert(!r0);
}
SrsMutex::~SrsMutex()
SrsThreadMutex::~SrsThreadMutex()
{
int rc = pthread_mutex_destroy(&mutex_);
srs_assert(!rc);
int r0 = pthread_mutex_destroy(&lock_);
srs_assert(!r0);
r0 = pthread_mutexattr_destroy(&attr_);
srs_assert(!r0);
}
void SrsMutex::lock()
void SrsThreadMutex::lock()
{
int rc = pthread_mutex_lock(&mutex_);
srs_assert(!rc);
// https://man7.org/linux/man-pages/man3/pthread_mutex_lock.3p.html
// EDEADLK
// The mutex type is PTHREAD_MUTEX_ERRORCHECK and the current
// thread already owns the mutex.
int r0 = pthread_mutex_lock(&lock_);
srs_assert(!r0);
}
void SrsMutex::unlock()
void SrsThreadMutex::unlock()
{
int rc = pthread_mutex_unlock(&mutex_);
srs_assert(!rc);
}
SrsAutoLock::SrsAutoLock(SrsMutex* mutex)
{
mutex_ = mutex;
mutex_->lock();
}
SrsAutoLock::~SrsAutoLock()
{
mutex_->unlock();
int r0 = pthread_mutex_unlock(&lock_);
srs_assert(!r0);
}