projects
/
urcu.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Remove unneeded signal in the cache-coherent case
[urcu.git]
/
test_urcu.c
diff --git
a/test_urcu.c
b/test_urcu.c
index 73fbc4e204e13b032a5830e9149974f32ff7cd19..129b33abdb4a3dd6d2e0bea6f567c0caad2fd611 100644
(file)
--- a/
test_urcu.c
+++ b/
test_urcu.c
@@
-47,14
+47,25
@@
static struct test_array *test_rcu_pointer;
static unsigned long duration;
static time_t start_time;
static unsigned long __thread duration_interval;
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.
*/
/*
* 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;
duration_interval = 0;
if (time(NULL) - start_time >= duration)
return 0;
@@
-65,6
+76,9
@@
static int test_duration(void)
#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)
@@
-124,8
+138,9
@@
static void test_array_free(struct test_array *ptr)
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",
@@
-140,20
+155,23
@@
void *thr_reader(void *arg)
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())
+ nr_reads++;
+ if (!test_duration_read())
break;
}
urcu_unregister_thread();
break;
}
urcu_unregister_thread();
+ *count = nr_reads;
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",
@@
-172,7
+190,8
@@
void *thr_writer(void *arg)
if (old)
old->a = 0;
test_array_free(old);
if (old)
old->a = 0;
test_array_free(old);
- if (!test_duration())
+ nr_writes++;
+ if (!test_duration_write())
break;
if (!no_writer_delay)
usleep(1);
break;
if (!no_writer_delay)
usleep(1);
@@
-180,6
+199,7
@@
void *thr_writer(void *arg)
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());
+ *count = nr_writes;
return ((void*)2);
}
return ((void*)2);
}
@@
-198,6
+218,8
@@
int main(int argc, char **argv)
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;
int i;
if (argc < 2) {
int i;
if (argc < 2) {
@@
-235,12
+257,14
@@
int main(int argc, char **argv)
"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]);
if (err != 0)
exit(1);
}
if (err != 0)
exit(1);
}
@@
-249,12
+273,17
@@
int main(int argc, char **argv)
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;
This page took
0.027504 seconds
and
4
git commands to generate.