Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
#define NR_READ 10
#define NR_WRITE 9
#define NR_READ 10
#define NR_WRITE 9
+static unsigned long long __thread nr_writes;
+static unsigned long long __thread nr_reads;
+
pthread_mutex_t rcu_copy_mutex = PTHREAD_MUTEX_INITIALIZER;
void rcu_copy_mutex_lock(void)
pthread_mutex_t rcu_copy_mutex = PTHREAD_MUTEX_INITIALIZER;
void rcu_copy_mutex_lock(void)
rcu_copy_mutex_unlock();
}
rcu_copy_mutex_unlock();
}
-void *thr_reader(void *arg)
+void *thr_reader(void *_count)
+ unsigned long long *count = _count;
struct test_array *local_ptr;
printf("thread_begin %s, thread id : %lx, tid %lu\n",
struct test_array *local_ptr;
printf("thread_begin %s, thread id : %lx, tid %lu\n",
if (local_ptr)
assert(local_ptr->a == 8);
rcu_read_unlock();
if (local_ptr)
assert(local_ptr->a == 8);
rcu_read_unlock();
if (!test_duration())
break;
}
urcu_unregister_thread();
if (!test_duration())
break;
}
urcu_unregister_thread();
printf("thread_end %s, thread id : %lx, tid %lu\n",
"reader", pthread_self(), (unsigned long)gettid());
return ((void*)1);
}
printf("thread_end %s, thread id : %lx, tid %lu\n",
"reader", pthread_self(), (unsigned long)gettid());
return ((void*)1);
}
-void *thr_writer(void *arg)
+void *thr_writer(void *_count)
+ unsigned long long *count = _count;
struct test_array *new, *old;
printf("thread_begin %s, thread id : %lx, tid %lu\n",
struct test_array *new, *old;
printf("thread_begin %s, thread id : %lx, tid %lu\n",
if (old)
old->a = 0;
test_array_free(old);
if (old)
old->a = 0;
test_array_free(old);
if (!test_duration())
break;
if (!no_writer_delay)
if (!test_duration())
break;
if (!no_writer_delay)
printf("thread_end %s, thread id : %lx, tid %lu\n",
"writer", pthread_self(), (unsigned long)gettid());
printf("thread_end %s, thread id : %lx, tid %lu\n",
"writer", pthread_self(), (unsigned long)gettid());
int err;
pthread_t tid_reader[NR_READ], tid_writer[NR_WRITE];
void *tret;
int err;
pthread_t tid_reader[NR_READ], tid_writer[NR_WRITE];
void *tret;
+ unsigned long long count_reader[NR_READ], count_writer[NR_WRITE];
+ unsigned long long tot_reads = 0, tot_writes = 0;
"main", pthread_self(), (unsigned long)gettid());
for (i = 0; i < NR_READ; i++) {
"main", pthread_self(), (unsigned long)gettid());
for (i = 0; i < NR_READ; i++) {
- err = pthread_create(&tid_reader[i], NULL, thr_reader, NULL);
+ err = pthread_create(&tid_reader[i], NULL, thr_reader,
+ &count_reader[i]);
if (err != 0)
exit(1);
}
for (i = 0; i < NR_WRITE; i++) {
if (err != 0)
exit(1);
}
for (i = 0; i < NR_WRITE; i++) {
- err = pthread_create(&tid_writer[i], NULL, thr_writer, NULL);
+ err = pthread_create(&tid_writer[i], NULL, thr_writer,
+ &count_writer[i]);
err = pthread_join(tid_reader[i], &tret);
if (err != 0)
exit(1);
err = pthread_join(tid_reader[i], &tret);
if (err != 0)
exit(1);
+ tot_reads += count_reader[i];
}
for (i = 0; i < NR_WRITE; i++) {
err = pthread_join(tid_writer[i], &tret);
if (err != 0)
exit(1);
}
for (i = 0; i < NR_WRITE; i++) {
err = pthread_join(tid_writer[i], &tret);
if (err != 0)
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);
return 0;
test_array_free(test_rcu_pointer);
return 0;