}
#endif
+#ifndef DYNAMIC_LINK_TEST
+#define _LGPL_SOURCE
+#else
+#define debug_yield_read()
+#endif
#include "urcu.h"
struct test_array {
static unsigned long duration;
static time_t start_time;
static unsigned long __thread duration_interval;
-#define DURATION_TEST_DELAY 100
+#define DURATION_TEST_DELAY_WRITE 4
+#define DURATION_TEST_DELAY_READ 100
/*
* returns 0 if test should end.
*/
-static int test_duration(void)
+static int test_duration_write(void)
+{
+ if (duration_interval++ >= DURATION_TEST_DELAY_WRITE) {
+ duration_interval = 0;
+ if (time(NULL) - start_time >= duration)
+ return 0;
+ }
+ return 1;
+}
+
+static int test_duration_read(void)
{
- if (duration_interval++ >= DURATION_TEST_DELAY) {
+ if (duration_interval++ >= DURATION_TEST_DELAY_READ) {
duration_interval = 0;
if (time(NULL) - start_time >= duration)
return 0;
printf("thread_begin %s, thread id : %lx, tid %lu\n",
"reader", pthread_self(), (unsigned long)gettid());
- urcu_register_thread();
+ rcu_register_thread();
for (;;) {
rcu_read_lock();
assert(local_ptr->a == 8);
rcu_read_unlock();
nr_reads++;
- if (!test_duration())
+ if (!test_duration_read())
break;
}
- urcu_unregister_thread();
+ rcu_unregister_thread();
*count = nr_reads;
printf("thread_end %s, thread id : %lx, tid %lu\n",
if (old)
assert(old->a == 8);
new->a = 8;
- old = urcu_publish_content(&test_rcu_pointer, new);
+ old = rcu_publish_content(&test_rcu_pointer, new);
rcu_copy_mutex_unlock();
/* can be done after unlock */
if (old)
old->a = 0;
test_array_free(old);
nr_writes++;
- if (!test_duration())
+ if (!test_duration_write())
break;
if (!no_writer_delay)
usleep(1);
exit(1);
tot_writes += count_writer[i];
}
+
printf("total number of reads : %llu, writes %llu\n", tot_reads,
tot_writes);
test_array_free(test_rcu_pointer);