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:
parent
339d3b31cc
commit
cb6a4d0143
4 changed files with 56 additions and 41 deletions
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue