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) {
+ 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_READ) {
duration_interval = 0;
if (time(NULL) - start_time >= duration)
return 0;
assert(local_ptr->a == 8);
rcu_read_unlock();
nr_reads++;
- if (!test_duration())
+ if (!test_duration_read())
break;
}
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);
void internal_urcu_lock(void)
{
+#if 0
int ret;
+ /* Mutex sleeping does not play well with busy-waiting loop. */
ret = pthread_mutex_lock(&urcu_mutex);
if (ret) {
perror("Error in pthread mutex lock");
exit(-1);
}
+#endif
+ while (pthread_mutex_trylock(&urcu_mutex) != 0)
+ cpu_relax();
}
void internal_urcu_unlock(void)