add two test cases
authorBrian Demsky <bdemsky@uci.edu>
Fri, 12 Oct 2012 06:56:40 +0000 (23:56 -0700)
committerBrian Demsky <bdemsky@uci.edu>
Fri, 12 Oct 2012 06:56:40 +0000 (23:56 -0700)
test/condvar.cc [new file with mode: 0644]
test/mutextest.cc [new file with mode: 0644]

diff --git a/test/condvar.cc b/test/condvar.cc
new file mode 100644 (file)
index 0000000..488f9be
--- /dev/null
@@ -0,0 +1,44 @@
+#include <stdio.h>
+
+#include "threads.h"
+#include "librace.h"
+#include "stdatomic.h"
+#include <mutex>
+#include "conditionvariable.h"
+
+std::mutex * m;
+std::condition_variable *v;
+int shareddata;
+
+static void a(void *obj)
+{
+       
+       m->lock();
+       while(load_32(&shareddata)==0)
+               v->wait(*m);
+       m->unlock();
+
+}
+
+static void b(void *obj)
+{
+       m->lock();
+       store_32(&shareddata, (unsigned int) 1);
+       v->notify_all();
+       m->unlock();
+}
+
+int user_main(int argc, char **argv)
+{
+       thrd_t t1, t2;
+       store_32(&shareddata, (unsigned int) 0);
+       m=new std::mutex();
+       v=new std::condition_variable();
+
+       thrd_create(&t1, (thrd_start_t)&a, NULL);
+       thrd_create(&t2, (thrd_start_t)&b, NULL);
+
+       thrd_join(t1);
+       thrd_join(t2);
+       return 0;
+}
diff --git a/test/mutextest.cc b/test/mutextest.cc
new file mode 100644 (file)
index 0000000..968d9c4
--- /dev/null
@@ -0,0 +1,38 @@
+#include <stdio.h>
+
+#include "threads.h"
+#include "librace.h"
+#include "stdatomic.h"
+#include <mutex>
+std::mutex * m;
+int shareddata;
+
+static void a(void *obj)
+{
+       int i;
+       for(i=0;i<2;i++) {
+               if ((i%2)==0) {
+                       m->lock();
+                       store_32(&shareddata,(unsigned int)i);
+                       m->unlock();
+               } else {
+                       while(!m->try_lock())
+                               ;
+                       store_32(&shareddata,(unsigned int)i);
+                       m->unlock();
+               }
+       }
+}
+
+int user_main(int argc, char **argv)
+{
+       thrd_t t1, t2;
+       m=new std::mutex();
+
+       thrd_create(&t1, (thrd_start_t)&a, NULL);
+       thrd_create(&t2, (thrd_start_t)&a, NULL);
+
+       thrd_join(t1);
+       thrd_join(t2);
+       return 0;
+}