mirror of
https://github.com/apache/nuttx.git
synced 2026-05-22 05:42:05 +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)
|
||||
{
|
||||
rwsem->holder = RWSEM_NO_HOLDER;
|
||||
up_wait(rwsem);
|
||||
}
|
||||
|
||||
goto out;
|
||||
@@ -176,9 +177,7 @@ void up_read(FAR rw_semaphore_t *rwsem)
|
||||
|
||||
DEBUGASSERT(rwsem->reader > 0);
|
||||
|
||||
rwsem->reader--;
|
||||
|
||||
if (rwsem->waiter > 0)
|
||||
if (--rwsem->reader <= 0)
|
||||
{
|
||||
up_wait(rwsem);
|
||||
}
|
||||
@@ -281,10 +280,9 @@ void up_write(FAR rw_semaphore_t *rwsem)
|
||||
if (--rwsem->writer <= 0)
|
||||
{
|
||||
rwsem->holder = RWSEM_NO_HOLDER;
|
||||
up_wait(rwsem);
|
||||
}
|
||||
|
||||
up_wait(rwsem);
|
||||
|
||||
nxmutex_unlock(&rwsem->protected);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user