You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@apr.apache.org by da...@apache.org on 2007/07/06 14:31:46 UTC
svn commit: r553863 - /apr/apr/trunk/test/testatomic.c
Author: davi
Date: Fri Jul 6 05:31:45 2007
New Revision: 553863
URL: http://svn.apache.org/viewvc?view=rev&rev=553863
Log:
The test can run faster by relinquishing the processor when the count value
is not the thread pre-value. This change lets increase the number of loops.
Modified:
apr/apr/trunk/test/testatomic.c
Modified: apr/apr/trunk/test/testatomic.c
URL: http://svn.apache.org/viewvc/apr/apr/trunk/test/testatomic.c?view=diff&rev=553863&r1=553862&r2=553863
==============================================================================
--- apr/apr/trunk/test/testatomic.c (original)
+++ apr/apr/trunk/test/testatomic.c Fri Jul 6 05:31:45 2007
@@ -300,15 +300,26 @@
void (*func)(tbox_t *box);
};
-static void busyloop_set32(tbox_t *tbox)
+static APR_INLINE void busyloop_read32(tbox_t *tbox)
{
apr_uint32_t val;
do {
- do {
- val = apr_atomic_read32(tbox->mem);
- } while (val != tbox->preval);
+ val = apr_atomic_read32(tbox->mem);
+
+ if (val != tbox->preval)
+ apr_thread_yield();
+ else
+ break;
+ } while (1);
+}
+
+static void busyloop_set32(tbox_t *tbox)
+{
+ apr_uint32_t val;
+ do {
+ busyloop_read32(tbox);
apr_atomic_set32(tbox->mem, tbox->postval);
} while (--tbox->loop);
}
@@ -318,12 +329,8 @@
apr_uint32_t val;
do {
- do {
- val = apr_atomic_read32(tbox->mem);
- } while (val != tbox->preval);
-
+ busyloop_read32(tbox);
val = apr_atomic_add32(tbox->mem, tbox->postval);
-
apr_thread_mutex_lock(thread_lock);
ABTS_INT_EQUAL(tbox->tc, val, tbox->preval);
apr_thread_mutex_unlock(thread_lock);
@@ -335,10 +342,7 @@
apr_uint32_t val;
do {
- do {
- val = apr_atomic_read32(tbox->mem);
- } while (val != tbox->preval);
-
+ busyloop_read32(tbox);
apr_atomic_sub32(tbox->mem, tbox->postval);
} while (--tbox->loop);
}
@@ -348,12 +352,8 @@
apr_uint32_t val;
do {
- do {
- val = apr_atomic_read32(tbox->mem);
- } while (val != tbox->preval);
-
+ busyloop_read32(tbox);
val = apr_atomic_inc32(tbox->mem);
-
apr_thread_mutex_lock(thread_lock);
ABTS_INT_EQUAL(tbox->tc, val, tbox->preval);
apr_thread_mutex_unlock(thread_lock);
@@ -365,12 +365,8 @@
apr_uint32_t val;
do {
- do {
- val = apr_atomic_read32(tbox->mem);
- } while (val != tbox->preval);
-
+ busyloop_read32(tbox);
val = apr_atomic_dec32(tbox->mem);
-
apr_thread_mutex_lock(thread_lock);
ABTS_INT_NEQUAL(tbox->tc, val, 0);
apr_thread_mutex_unlock(thread_lock);
@@ -384,7 +380,12 @@
do {
do {
val = apr_atomic_cas32(tbox->mem, tbox->postval, tbox->preval);
- } while (val != tbox->preval);
+
+ if (val != tbox->preval)
+ apr_thread_yield();
+ else
+ break;
+ } while (1);
} while (--tbox->loop);
}
@@ -393,12 +394,8 @@
apr_uint32_t val;
do {
- do {
- val = apr_atomic_read32(tbox->mem);
- } while (val != tbox->preval);
-
+ busyloop_read32(tbox);
val = apr_atomic_xchg32(tbox->mem, tbox->postval);
-
apr_thread_mutex_lock(thread_lock);
ABTS_INT_EQUAL(tbox->tc, val, tbox->preval);
apr_thread_mutex_unlock(thread_lock);
@@ -431,7 +428,7 @@
for (i = 0; i < NUM_THREADS; i++) {
tbox[i].tc = tc;
tbox[i].mem = &count;
- tbox[i].loop = 5;
+ tbox[i].loop = 50;
}
tbox[0].preval = 98;