]> pd.if.org Git - nbds/blobdiff - test/haz_test.c
work in progress
[nbds] / test / haz_test.c
index c55ad0ec2698c5afadd7eb31fcb20bee52802132..1514efaf0a93a2a1a32aa2db9902b2ddc534e1dc 100644 (file)
@@ -17,7 +17,6 @@
 #include "hazard.h"
 
 #define NUM_ITERATIONS 10000000
-#define MAX_NUM_THREADS 4
 
 typedef struct node {
     struct node *next;
@@ -36,7 +35,7 @@ void *worker (void *arg) {
     haz_t *hp0 = haz_get_static(0);
 
     // Wait for all the worker threads to be ready.
-    __sync_fetch_and_add(&wait_, -1);
+    (void)SYNC_ADD(&wait_, -1);
     do {} while (wait_); 
 
     int i;
@@ -50,7 +49,7 @@ void *worker (void *arg) {
             do {
                 temp = old_head;
                 new_head->next = temp;
-            } while ((old_head = __sync_val_compare_and_swap(&stk_->head, temp, new_head)) != temp);
+            } while ((old_head = SYNC_CAS(&stk_->head, temp, new_head)) != temp);
         } else {
             // pop
             node_t *temp;
@@ -60,10 +59,10 @@ void *worker (void *arg) {
                 if (temp == NULL)
                     break;
                 haz_set(hp0, temp);
-                head = ((volatile lifo_t *)stk_)->head;
+                head = VOLATILE_DEREF(stk_).head;
                 if (temp != head)
                     continue;
-            } while ((head = __sync_val_compare_and_swap(&stk_->head, temp, temp->next)) != temp);
+            } while ((head = SYNC_CAS(&stk_->head, temp, temp->next)) != temp);
 
             if (temp != NULL) {
                 haz_defer_free(temp, nbd_free);
@@ -77,7 +76,7 @@ void *worker (void *arg) {
 int main (int argc, char **argv) {
     //lwt_set_trace_level("m0r0");
 
-    int num_threads = 2;
+    int num_threads = MAX_NUM_THREADS;
     if (argc == 2)
     {
         errno = 0;