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:
Yongrong Wang
2025-01-09 20:26:25 +08:00
committed by Xiang Xiao
parent 7113b61b1d
commit 53e9c5b986
+3 -5
View File
@@ -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);
}