This is an automated email from the ASF dual-hosted git repository. xiaoxiang pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/nuttx.git
commit 53e9c5b986f4d35fe1087d8b62dab83f7609a99a Author: Yongrong Wang <[email protected]> AuthorDate: Thu Jan 9 20:26:25 2025 +0800 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 <[email protected]> --- sched/semaphore/sem_rw.c | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/sched/semaphore/sem_rw.c b/sched/semaphore/sem_rw.c index a79ce0c0848..8b1c7e1d249 100644 --- a/sched/semaphore/sem_rw.c +++ b/sched/semaphore/sem_rw.c @@ -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); }
