mirror of
https://github.com/apache/nuttx.git
synced 2026-06-02 01:21:26 +08:00
sem_rw: optimize up_read/up_write API
This change optimizes the reader-writer semaphore release process by consolidating redundant context switch operations and improving code efficiency, reducing unnecessary wake-ups during concurrent access scenarios. Signed-off-by: Yongrong Wang <wangyongrong@xiaomi.com>
This commit is contained in:
committed by
Xiang Xiao
parent
7113b61b1d
commit
53e9c5b986
@@ -169,6 +169,7 @@ void up_read(FAR rw_semaphore_t *rwsem)
|
|||||||
if (--rwsem->writer <= 0)
|
if (--rwsem->writer <= 0)
|
||||||
{
|
{
|
||||||
rwsem->holder = RWSEM_NO_HOLDER;
|
rwsem->holder = RWSEM_NO_HOLDER;
|
||||||
|
up_wait(rwsem);
|
||||||
}
|
}
|
||||||
|
|
||||||
goto out;
|
goto out;
|
||||||
@@ -176,9 +177,7 @@ void up_read(FAR rw_semaphore_t *rwsem)
|
|||||||
|
|
||||||
DEBUGASSERT(rwsem->reader > 0);
|
DEBUGASSERT(rwsem->reader > 0);
|
||||||
|
|
||||||
rwsem->reader--;
|
if (--rwsem->reader <= 0)
|
||||||
|
|
||||||
if (rwsem->waiter > 0)
|
|
||||||
{
|
{
|
||||||
up_wait(rwsem);
|
up_wait(rwsem);
|
||||||
}
|
}
|
||||||
@@ -281,9 +280,8 @@ void up_write(FAR rw_semaphore_t *rwsem)
|
|||||||
if (--rwsem->writer <= 0)
|
if (--rwsem->writer <= 0)
|
||||||
{
|
{
|
||||||
rwsem->holder = RWSEM_NO_HOLDER;
|
rwsem->holder = RWSEM_NO_HOLDER;
|
||||||
}
|
|
||||||
|
|
||||||
up_wait(rwsem);
|
up_wait(rwsem);
|
||||||
|
}
|
||||||
|
|
||||||
nxmutex_unlock(&rwsem->protected);
|
nxmutex_unlock(&rwsem->protected);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user