/* hardcoded number of CPUs */
#define NR_CPUS 16384
+/* number of insert/delete */
+#define NR_RAND 3
+
#if defined(_syscall0)
_syscall0(pid_t, gettid)
#elif defined(__NR_gettid)
{
unsigned long long *count = _count;
struct rcu_rbtree_node *node;
+ void *key[NR_RAND];
+ int i;
printf_verbose("thread_begin %s, thread id : %lx, tid %lu\n",
"writer", pthread_self(), (unsigned long)gettid());
smp_mb();
for (;;) {
- node = rbtree_alloc();
rcu_copy_mutex_lock();
- node->key = (void *)(unsigned long)(rand() % 2048);
- rcu_rbtree_insert(&rbtree_root, node, tree_comp, rbtree_alloc,
- rbtree_free);
+
+ for (i = 0; i < NR_RAND; i++) {
+ node = rbtree_alloc();
+ key[i] = (void *)(unsigned long)(rand() % 2048);
+ node->key = key[i];
+ rcu_rbtree_insert(&rbtree_root, node, tree_comp,
+ rbtree_alloc, rbtree_free);
+ }
+
if (unlikely(wduration))
loop_sleep(wduration);
+ for (i = 0; i < NR_RAND; i++) {
+ node = rcu_rbtree_search(rbtree_root, key[i],
+ tree_comp);
+ assert(node != &rcu_rbtree_nil);
+ rcu_rbtree_remove(&rbtree_root, node, tree_comp,
+ rbtree_alloc, rbtree_free);
+ defer_rcu((void (*)(void *))rbtree_free, node);
+ }
+
rcu_copy_mutex_unlock();
nr_writes++;
if (unlikely(!test_duration_write()))