mirror of
https://github.com/apache/nuttx.git
synced 2026-05-20 04:16:35 +08:00
sched/sem_rw.c: Add downgrade_write API for sem_rw
support downgrad a write lock to a read lock Signed-off-by: Yongrong Wang <wangyongrong@xiaomi.com>
This commit is contained in:
committed by
Xiang Xiao
parent
f9272fa090
commit
eac3cea465
@@ -142,6 +142,19 @@ void down_write(FAR rw_semaphore_t *rwsem);
|
||||
|
||||
void up_write(FAR rw_semaphore_t *rwsem);
|
||||
|
||||
/****************************************************************************
|
||||
* Name: downgrade_write
|
||||
*
|
||||
* Description:
|
||||
* Down grade write lock to read lock on a read-write-lock object.
|
||||
*
|
||||
* Input Parameters:
|
||||
* rwsem - Pointer to the read-write-lock descriptor.
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
void downgrade_write(FAR rw_semaphore_t *rwsem);
|
||||
|
||||
/****************************************************************************
|
||||
* Name: init_rwsem
|
||||
*
|
||||
|
||||
@@ -286,6 +286,33 @@ void up_write(FAR rw_semaphore_t *rwsem)
|
||||
nxmutex_unlock(&rwsem->protected);
|
||||
}
|
||||
|
||||
/****************************************************************************
|
||||
* Name: downgrade_write
|
||||
*
|
||||
* Description:
|
||||
* Downgrade write lock to read lock on a read-write-lock object.
|
||||
*
|
||||
* Input Parameters:
|
||||
* rwsem - Pointer to the read-write-lock descriptor.
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
void downgrade_write(FAR rw_semaphore_t *rwsem)
|
||||
{
|
||||
nxmutex_lock(&rwsem->protected);
|
||||
|
||||
DEBUGASSERT(rwsem->writer == 1);
|
||||
DEBUGASSERT(rwsem->reader == 0);
|
||||
DEBUGASSERT(rwsem->holder == _SCHED_GETTID());
|
||||
|
||||
rwsem->writer = 0;
|
||||
rwsem->reader++;
|
||||
rwsem->holder = RWSEM_NO_HOLDER;
|
||||
|
||||
up_wait(rwsem);
|
||||
nxmutex_unlock(&rwsem->protected);
|
||||
}
|
||||
|
||||
/****************************************************************************
|
||||
* Name: init_rwsem
|
||||
*
|
||||
|
||||
Reference in New Issue
Block a user