cxx: fixed thread::join() and added simple threads test. [T60]
authorSimon Gerber <simon.gerber@inf.ethz.ch>
Wed, 18 Feb 2015 15:17:07 +0000 (16:17 +0100)
committerSimon Gerber <simon.gerber@inf.ethz.ch>
Mon, 9 Mar 2015 14:36:21 +0000 (15:36 +0100)
Signed-off-by: Simon Gerber <simon.gerber@inf.ethz.ch>

lib/cxx/cxx/thread.cpp
usr/tests/cxx/cxxtest.hpp
usr/tests/cxx/stl_threads.cpp
usr/tests/cxx/test.cpp

index d7ad275..e12fb5e 100644 (file)
@@ -38,7 +38,6 @@ thread::~thread()
 void
 thread::join()
 {
-#ifndef BARRELFISH
     int ec = pthread_join(__t_, 0);
 #ifndef _LIBCPP_NO_EXCEPTIONS
     if (ec)
@@ -47,11 +46,6 @@ thread::join()
     (void)ec;
 #endif  // _LIBCPP_NO_EXCEPTIONS
     __t_ = 0;
-#else
-       // TODO: thread join
-       /* thread_join() */
-       abort();
-#endif
 }
 
 void
index d34ee77..5d0109c 100644 (file)
@@ -12,6 +12,7 @@ void stl_list_test(void);
 void stl_vector_test(void);
 void stl_map_test(void);
 void stl_exception_test(void);
+void stl_thread_test(void);
 void cx11_test(void);
 
 #endif /* CXXTEST_H_ */
index e84d214..f3b53a3 100644 (file)
 #include <iostream>
 #include <vector>
 #include <string>
+#include <thread>
 
 #include "cxxtest.hpp"
 
+static std::mutex tmx;
+static int thread_counter;
+static void thread_func(int v)
+{
+    std::lock_guard<std::mutex> l(tmx);
+    std::cout << "thread " << v << std::endl;
+    thread_counter++;
+}
+
+static void cxx11_vector_of_threads(void)
+{
+    int i;
+    std::vector<std::thread> threads;
+    for (i=0; i<2; ++i) {
+        std::cout << "emplacing thread " << i << std::endl;
+        threads.emplace_back(thread_func, i);
+        std::cout << "emplaced thread " << i << std::endl;
+    }
+    i = 0;
+    for (auto &t: threads) {
+        std::cout << "joining thread " << i << std::endl;
+        t.join();
+        std::cout << "joined thread " << i << std::endl;
+        i++;
+    }
+    std::cout << "threads joined, thread_counter=" << thread_counter << std::endl;
+}
+
+void stl_thread_test(void)
+{
+    cxx11_vector_of_threads();
+}
index 74f676d..39f18bc 100644 (file)
@@ -21,7 +21,7 @@ int main(int argc,
     stl_map_test();
     stl_exception_test();
     cx11_test();
-
+    stl_thread_test();
 
     std::cout << "Tests done: SUCCESS" << std::endl;
     return 0;