From 8c8bcc5d1737002a9d153105c16b262d2e201efa Mon Sep 17 00:00:00 2001 From: rpj Date: Tue, 19 Oct 2004 13:24:40 +0000 Subject: Semaphore speedups - alpha, but passes testsuite --- sem_post_multiple.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'sem_post_multiple.c') diff --git a/sem_post_multiple.c b/sem_post_multiple.c index 43c71a6..e30e01a 100644 --- a/sem_post_multiple.c +++ b/sem_post_multiple.c @@ -76,6 +76,9 @@ sem_post_multiple (sem_t * sem, int count) */ { int result = 0; +#ifndef NEED_SEM + long waiters; +#endif if (sem == NULL || *sem == NULL || count <= 0) { @@ -88,7 +91,8 @@ sem_post_multiple (sem_t * sem, int count) #else /* NEED_SEM */ - else if (!ReleaseSemaphore ((*sem)->sem, count, 0)) + else if ((waiters = -InterlockedExchangeAdd((LPLONG) &(*sem)->value, (LONG) count)) > 0 + && !ReleaseSemaphore((*sem)->sem, (waiters<=count)?waiters:count, 0)) #endif /* NEED_SEM */ -- cgit v1.2.3