17 #ifndef __deal2__thread_management_h
18 #define __deal2__thread_management_h
21 #include <deal.II/base/config.h>
23 #include <deal.II/base/template_constraints.h>
24 #include <deal.II/base/std_cxx1x/tuple.h>
25 #include <deal.II/base/std_cxx1x/function.h>
26 #include <deal.II/base/std_cxx1x/shared_ptr.h>
27 #include <deal.II/base/std_cxx1x/bind.h>
29 #ifdef DEAL_II_WITH_THREADS
30 # include <deal.II/base/std_cxx1x/thread.h>
31 # include <deal.II/base/std_cxx1x/mutex.h>
32 # include <deal.II/base/std_cxx1x/condition_variable.h>
41 #ifdef DEAL_II_WITH_THREADS
42 # ifdef DEAL_II_USE_MT_POSIX
45 # include <tbb/task.h>
247 const char *name = 0,
277 <<
"In single-thread mode, other barrier sizes than 1 are not "
278 <<
"useful. You gave " << arg1);
284 #ifdef DEAL_II_WITH_THREADS
483 std_cxx1x::unique_lock<std_cxx1x::mutex> lock(mutex.
mutex,
484 std_cxx1x::adopt_lock);
534 const char *name = 0,
563 #ifndef DEAL_II_USE_MT_POSIX_NO_BARRIERS
743 template <
typename ForwardIterator>
744 std::vector<std::pair<ForwardIterator,ForwardIterator> >
746 const ForwardIterator &end,
747 const unsigned int n_intervals);
760 std::vector<std::pair<unsigned int,unsigned int> >
762 const unsigned int end,
763 const unsigned int n_intervals);
811 void handle_std_exception (
const std::exception &exc);
821 void handle_unknown_exception ();
833 void register_thread ();
845 void deregister_thread ();
858 template <
typename ForwardIterator>
859 std::vector<std::pair<ForwardIterator,ForwardIterator> >
861 const ForwardIterator &end,
862 const unsigned int n_intervals)
864 typedef std::pair<ForwardIterator,ForwardIterator> IteratorPair;
874 return (std::vector<IteratorPair>
875 (1, IteratorPair(begin, end)));
879 const unsigned int n_elements = std::distance (begin, end);
880 const unsigned int n_elements_per_interval = n_elements / n_intervals;
881 const unsigned int residual = n_elements % n_intervals;
883 std::vector<IteratorPair> return_values (n_intervals);
885 return_values[0].first = begin;
886 for (
unsigned int i=0; i<n_intervals; ++i)
888 if (i != n_intervals-1)
890 return_values[i].second = return_values[i].first;
899 std::advance (return_values[i].second,
900 static_cast<signed int>(n_elements_per_interval));
906 ++return_values[i].second;
908 return_values[i+1].first = return_values[i].second;
911 return_values[i].second = end;
913 return return_values;
940 inline RT
get ()
const
944 inline void set (RT v)
971 inline RT &
get ()
const
975 inline void set (RT &v)
996 static inline void get () {}
1004 template <
typename RT>
1005 inline void call (
const std_cxx1x::function<RT ()> &
function,
1008 ret_val.set (
function());
1012 inline void call (
const std_cxx1x::function<
void ()> &
function,
1013 internal::return_value<void> &)
1036 template <
typename RT,
typename ArgList,
1037 int length = std_cxx1x::tuple_size<ArgList>::value>
1048 template <
typename RT,
typename ArgList>
1051 typedef RT (type) ();
1062 template <
typename RT,
typename ArgList>
1065 typedef RT (type) (
typename std_cxx1x::tuple_element<0,ArgList>::type);
1076 template <
typename RT,
typename ArgList>
1079 typedef RT (type) (
typename std_cxx1x::tuple_element<0,ArgList>::type,
1080 typename std_cxx1x::tuple_element<1,ArgList>::type);
1091 template <
typename RT,
typename ArgList>
1094 typedef RT (type) (
typename std_cxx1x::tuple_element<0,ArgList>::type,
1095 typename std_cxx1x::tuple_element<1,ArgList>::type,
1096 typename std_cxx1x::tuple_element<2,ArgList>::type);
1107 template <
typename RT,
typename ArgList>
1110 typedef RT (type) (
typename std_cxx1x::tuple_element<0,ArgList>::type,
1111 typename std_cxx1x::tuple_element<1,ArgList>::type,
1112 typename std_cxx1x::tuple_element<2,ArgList>::type,
1113 typename std_cxx1x::tuple_element<3,ArgList>::type);
1124 template <
typename RT,
typename ArgList>
1127 typedef RT (type) (
typename std_cxx1x::tuple_element<0,ArgList>::type,
1128 typename std_cxx1x::tuple_element<1,ArgList>::type,
1129 typename std_cxx1x::tuple_element<2,ArgList>::type,
1130 typename std_cxx1x::tuple_element<3,ArgList>::type,
1131 typename std_cxx1x::tuple_element<4,ArgList>::type);
1142 template <
typename RT,
typename ArgList>
1145 typedef RT (type) (
typename std_cxx1x::tuple_element<0,ArgList>::type,
1146 typename std_cxx1x::tuple_element<1,ArgList>::type,
1147 typename std_cxx1x::tuple_element<2,ArgList>::type,
1148 typename std_cxx1x::tuple_element<3,ArgList>::type,
1149 typename std_cxx1x::tuple_element<4,ArgList>::type,
1150 typename std_cxx1x::tuple_element<5,ArgList>::type);
1161 template <
typename RT,
typename ArgList>
1164 typedef RT (type) (
typename std_cxx1x::tuple_element<0,ArgList>::type,
1165 typename std_cxx1x::tuple_element<1,ArgList>::type,
1166 typename std_cxx1x::tuple_element<2,ArgList>::type,
1167 typename std_cxx1x::tuple_element<3,ArgList>::type,
1168 typename std_cxx1x::tuple_element<4,ArgList>::type,
1169 typename std_cxx1x::tuple_element<5,ArgList>::type,
1170 typename std_cxx1x::tuple_element<6,ArgList>::type);
1181 template <
typename RT,
typename ArgList>
1184 typedef RT (type) (
typename std_cxx1x::tuple_element<0,ArgList>::type,
1185 typename std_cxx1x::tuple_element<1,ArgList>::type,
1186 typename std_cxx1x::tuple_element<2,ArgList>::type,
1187 typename std_cxx1x::tuple_element<3,ArgList>::type,
1188 typename std_cxx1x::tuple_element<4,ArgList>::type,
1189 typename std_cxx1x::tuple_element<5,ArgList>::type,
1190 typename std_cxx1x::tuple_element<6,ArgList>::type,
1191 typename std_cxx1x::tuple_element<7,ArgList>::type);
1202 template <
typename RT,
typename ArgList>
1205 typedef RT (type) (
typename std_cxx1x::tuple_element<0,ArgList>::type,
1206 typename std_cxx1x::tuple_element<1,ArgList>::type,
1207 typename std_cxx1x::tuple_element<2,ArgList>::type,
1208 typename std_cxx1x::tuple_element<3,ArgList>::type,
1209 typename std_cxx1x::tuple_element<4,ArgList>::type,
1210 typename std_cxx1x::tuple_element<5,ArgList>::type,
1211 typename std_cxx1x::tuple_element<6,ArgList>::type,
1212 typename std_cxx1x::tuple_element<7,ArgList>::type,
1213 typename std_cxx1x::tuple_element<8,ArgList>::type);
1225 template <
typename RT,
typename ArgList>
1228 typedef RT (type) (
typename std_cxx1x::tuple_element<0,ArgList>::type,
1229 typename std_cxx1x::tuple_element<1,ArgList>::type,
1230 typename std_cxx1x::tuple_element<2,ArgList>::type,
1231 typename std_cxx1x::tuple_element<3,ArgList>::type,
1232 typename std_cxx1x::tuple_element<4,ArgList>::type,
1233 typename std_cxx1x::tuple_element<5,ArgList>::type,
1234 typename std_cxx1x::tuple_element<6,ArgList>::type,
1235 typename std_cxx1x::tuple_element<7,ArgList>::type,
1236 typename std_cxx1x::tuple_element<8,ArgList>::type,
1237 typename std_cxx1x::tuple_element<9,ArgList>::type);
1259 template <
typename RT,
typename ArgList>
1270 #ifdef DEAL_II_WITH_THREADS
1287 template <
typename RT>
1375 thread_is_active (false)
1380 if (!thread_is_active)
1383 thread_is_active =
false;
1391 void start (
const std_cxx1x::function<RT ()> &
function)
1393 thread_is_active =
true;
1408 if (thread_is_active ==
false)
1412 if (thread_is_active ==
true)
1416 thread_is_active =
false;
1442 internal::register_thread ();
1445 call (
function, *ret_val);
1447 catch (
const std::exception &exc)
1449 internal::handle_std_exception (exc);
1453 internal::handle_unknown_exception ();
1455 internal::deregister_thread ();
1472 template <
typename RT>
1473 struct ThreadDescriptor
1480 std_cxx1x::shared_ptr<return_value<RT> >
ret_val;
1487 void start (
const std_cxx1x::function<RT ()> &
function)
1489 ret_val.reset(
new return_value<RT>());
1490 call (
function, *ret_val);
1541 template <
typename RT =
void>
1549 Thread (
const std_cxx1x::function<RT ()> &
function)
1659 template <
typename T>
1679 template <
typename T>
1682 static std_cxx1x::reference_wrapper<T> act (T &t)
1684 return std_cxx1x::ref(t);
1717 template <
typename RT,
typename ArgList,
int length>
1728 template <
typename RT,
typename ArgList>
1733 :
function (*function)
1736 fun_encapsulator (
const std_cxx1x::function<
typename internal::fun_ptr<RT,ArgList>::type> &
function)
1737 :
function (
function)
1748 std_cxx1x::function<typename internal::fun_ptr<RT,ArgList>::type>
function;
1756 template <
typename RT,
typename ArgList>
1761 :
function (*function)
1764 fun_encapsulator (
const std_cxx1x::function<
typename internal::fun_ptr<RT,ArgList>::type> &
function)
1765 :
function (
function)
1770 operator() (
typename std_cxx1x::tuple_element<0,ArgList>::type arg1)
1774 (std_cxx1x::bind (
function,
1779 std_cxx1x::function<typename internal::fun_ptr<RT,ArgList>::type>
function;
1787 template <
typename RT,
typename ArgList>
1792 :
function (*function)
1795 fun_encapsulator (
const std_cxx1x::function<
typename internal::fun_ptr<RT,ArgList>::type> &
function)
1796 :
function (
function)
1801 operator() (
typename std_cxx1x::tuple_element<0,ArgList>::type arg1,
1802 typename std_cxx1x::tuple_element<1,ArgList>::type arg2)
1806 (std_cxx1x::bind (
function,
1812 std_cxx1x::function<typename internal::fun_ptr<RT,ArgList>::type>
function;
1820 template <
typename RT,
typename ArgList>
1825 :
function (*function)
1828 fun_encapsulator (
const std_cxx1x::function<
typename internal::fun_ptr<RT,ArgList>::type> &
function)
1829 :
function (
function)
1834 operator() (
typename std_cxx1x::tuple_element<0,ArgList>::type arg1,
1835 typename std_cxx1x::tuple_element<1,ArgList>::type arg2,
1836 typename std_cxx1x::tuple_element<2,ArgList>::type arg3)
1840 (std_cxx1x::bind (
function,
1847 std_cxx1x::function<typename internal::fun_ptr<RT,ArgList>::type>
function;
1855 template <
typename RT,
typename ArgList>
1860 :
function (*function)
1863 fun_encapsulator (
const std_cxx1x::function<
typename internal::fun_ptr<RT,ArgList>::type> &
function)
1864 :
function (
function)
1869 operator() (
typename std_cxx1x::tuple_element<0,ArgList>::type arg1,
1870 typename std_cxx1x::tuple_element<1,ArgList>::type arg2,
1871 typename std_cxx1x::tuple_element<2,ArgList>::type arg3,
1872 typename std_cxx1x::tuple_element<3,ArgList>::type arg4)
1876 (std_cxx1x::bind (
function,
1884 std_cxx1x::function<typename internal::fun_ptr<RT,ArgList>::type>
function;
1892 template <
typename RT,
typename ArgList>
1897 :
function (*function)
1900 fun_encapsulator (
const std_cxx1x::function<
typename internal::fun_ptr<RT,ArgList>::type> &
function)
1901 :
function (
function)
1906 operator() (
typename std_cxx1x::tuple_element<0,ArgList>::type arg1,
1907 typename std_cxx1x::tuple_element<1,ArgList>::type arg2,
1908 typename std_cxx1x::tuple_element<2,ArgList>::type arg3,
1909 typename std_cxx1x::tuple_element<3,ArgList>::type arg4,
1910 typename std_cxx1x::tuple_element<4,ArgList>::type arg5)
1914 (std_cxx1x::bind (
function,
1923 std_cxx1x::function<typename internal::fun_ptr<RT,ArgList>::type>
function;
1931 template <
typename RT,
typename ArgList>
1936 :
function (*function)
1939 fun_encapsulator (
const std_cxx1x::function<
typename internal::fun_ptr<RT,ArgList>::type> &
function)
1940 :
function (
function)
1945 operator() (
typename std_cxx1x::tuple_element<0,ArgList>::type arg1,
1946 typename std_cxx1x::tuple_element<1,ArgList>::type arg2,
1947 typename std_cxx1x::tuple_element<2,ArgList>::type arg3,
1948 typename std_cxx1x::tuple_element<3,ArgList>::type arg4,
1949 typename std_cxx1x::tuple_element<4,ArgList>::type arg5,
1950 typename std_cxx1x::tuple_element<5,ArgList>::type arg6)
1954 (std_cxx1x::bind (
function,
1964 std_cxx1x::function<typename internal::fun_ptr<RT,ArgList>::type>
function;
1972 template <
typename RT,
typename ArgList>
1977 :
function (*function)
1980 fun_encapsulator (
const std_cxx1x::function<
typename internal::fun_ptr<RT,ArgList>::type> &
function)
1981 :
function (
function)
1986 operator() (
typename std_cxx1x::tuple_element<0,ArgList>::type arg1,
1987 typename std_cxx1x::tuple_element<1,ArgList>::type arg2,
1988 typename std_cxx1x::tuple_element<2,ArgList>::type arg3,
1989 typename std_cxx1x::tuple_element<3,ArgList>::type arg4,
1990 typename std_cxx1x::tuple_element<4,ArgList>::type arg5,
1991 typename std_cxx1x::tuple_element<5,ArgList>::type arg6,
1992 typename std_cxx1x::tuple_element<6,ArgList>::type arg7)
1996 (std_cxx1x::bind (
function,
2007 std_cxx1x::function<typename internal::fun_ptr<RT,ArgList>::type>
function;
2015 template <
typename RT,
typename ArgList>
2020 :
function (*function)
2023 fun_encapsulator (
const std_cxx1x::function<
typename internal::fun_ptr<RT,ArgList>::type> &
function)
2024 :
function (
function)
2029 operator() (
typename std_cxx1x::tuple_element<0,ArgList>::type arg1,
2030 typename std_cxx1x::tuple_element<1,ArgList>::type arg2,
2031 typename std_cxx1x::tuple_element<2,ArgList>::type arg3,
2032 typename std_cxx1x::tuple_element<3,ArgList>::type arg4,
2033 typename std_cxx1x::tuple_element<4,ArgList>::type arg5,
2034 typename std_cxx1x::tuple_element<5,ArgList>::type arg6,
2035 typename std_cxx1x::tuple_element<6,ArgList>::type arg7,
2036 typename std_cxx1x::tuple_element<7,ArgList>::type arg8)
2040 (std_cxx1x::bind (
function,
2052 std_cxx1x::function<typename internal::fun_ptr<RT,ArgList>::type>
function;
2060 template <
typename RT,
typename ArgList>
2065 :
function (*function)
2068 fun_encapsulator (
const std_cxx1x::function<
typename internal::fun_ptr<RT,ArgList>::type> &
function)
2069 :
function (
function)
2074 operator() (
typename std_cxx1x::tuple_element<0,ArgList>::type arg1,
2075 typename std_cxx1x::tuple_element<1,ArgList>::type arg2,
2076 typename std_cxx1x::tuple_element<2,ArgList>::type arg3,
2077 typename std_cxx1x::tuple_element<3,ArgList>::type arg4,
2078 typename std_cxx1x::tuple_element<4,ArgList>::type arg5,
2079 typename std_cxx1x::tuple_element<5,ArgList>::type arg6,
2080 typename std_cxx1x::tuple_element<6,ArgList>::type arg7,
2081 typename std_cxx1x::tuple_element<7,ArgList>::type arg8,
2082 typename std_cxx1x::tuple_element<8,ArgList>::type arg9)
2086 (std_cxx1x::bind (
function,
2099 std_cxx1x::function<typename internal::fun_ptr<RT,ArgList>::type>
function;
2115 template <
typename RT>
2121 template <typename RT>
2137 template <
typename RT,
typename C>
2139 internal::fun_encapsulator<RT,std_cxx1x::tuple<>,0>
2143 template <typename RT, typename C>
2149 std_cxx1x::function<typename internal::fun_ptr<RT,std_cxx1x::tuple<> >::type>
2150 (std_cxx1x::bind(fun_ptr, std_cxx1x::ref(c)));
2160 template <
typename RT,
typename C>
2162 internal::fun_encapsulator<RT,std_cxx1x::tuple<>,0>
2166 template <typename RT, typename C>
2169 spawn (const C &c, RT (C::*fun_ptr)() const)
2172 std_cxx1x::function<typename internal::fun_ptr<RT,std_cxx1x::tuple<> >::type>
2173 (std_cxx1x::bind(fun_ptr, std_cxx1x::cref(c)));
2188 template <
typename RT,
typename Arg1>
2190 internal::fun_encapsulator<RT,std_cxx1x::tuple<Arg1>,1>
2194 template <typename RT, typename Arg1>
2211 template <
typename RT,
typename C,
typename Arg1>
2213 internal::fun_encapsulator<RT,std_cxx1x::tuple<Arg1>,1>
2217 template <typename RT, typename C, typename Arg1>
2223 std_cxx1x::function<typename internal::fun_ptr<RT,std_cxx1x::tuple<Arg1> >::type>
2224 (std_cxx1x::bind(fun_ptr, std_cxx1x::ref(c), std_cxx1x::_1));
2234 template <
typename RT,
typename C,
typename Arg1>
2236 internal::fun_encapsulator<RT,std_cxx1x::tuple<Arg1>,1>
2240 template <typename RT, typename C, typename Arg1>
2243 spawn (const C &c, RT (C::*fun_ptr)(Arg1) const)
2246 std_cxx1x::function<typename internal::fun_ptr<RT,std_cxx1x::tuple<Arg1> >::type>
2247 (std_cxx1x::bind(fun_ptr, std_cxx1x::cref(c), std_cxx1x::_1));
2260 template <
typename RT,
typename Arg1,
typename Arg2>
2262 internal::fun_encapsulator<RT,std_cxx1x::tuple<Arg1, Arg2>,2>
2266 template <typename RT, typename Arg1, typename Arg2>
2283 template <
typename RT,
typename C,
typename Arg1,
typename Arg2>
2285 internal::fun_encapsulator<RT,std_cxx1x::tuple<Arg1, Arg2>,2>
2289 template <typename RT, typename C, typename Arg1, typename Arg2>
2292 spawn (C &c, RT (C::*fun_ptr)(Arg1,Arg2))
2295 std_cxx1x::function<typename internal::fun_ptr<RT,std_cxx1x::tuple<Arg1,Arg2> >::type>
2296 (std_cxx1x::bind(fun_ptr, std_cxx1x::ref(c), std_cxx1x::_1, std_cxx1x::_2));
2306 template <
typename RT,
typename C,
typename Arg1,
typename Arg2>
2308 internal::fun_encapsulator<RT,std_cxx1x::tuple<Arg1, Arg2>,2>
2312 template <typename RT, typename C, typename Arg1, typename Arg2>
2315 spawn (const C &c, RT (C::*fun_ptr)(Arg1,Arg2) const)
2318 std_cxx1x::function<typename internal::fun_ptr<RT,std_cxx1x::tuple<Arg1,Arg2> >::type>
2319 (std_cxx1x::bind(fun_ptr, std_cxx1x::cref(c), std_cxx1x::_1, std_cxx1x::_2));
2332 template <
typename RT,
2333 typename Arg1,
typename Arg2,
typename Arg3>
2335 internal::fun_encapsulator<RT,std_cxx1x::tuple<Arg1, Arg2, Arg3>,3>
2339 template <typename RT,
2340 typename Arg1, typename Arg2, typename Arg3>
2357 template <
typename RT,
typename C,
2358 typename Arg1,
typename Arg2,
typename Arg3>
2360 internal::fun_encapsulator<RT,std_cxx1x::tuple<Arg1, Arg2, Arg3>,3>
2364 template <typename RT, typename C,
2365 typename Arg1, typename Arg2, typename Arg3>
2368 spawn (C &c, RT (C::*fun_ptr)(Arg1,Arg2,Arg3))
2371 std_cxx1x::function<typename internal::fun_ptr<RT,std_cxx1x::tuple<Arg1,Arg2,Arg3> >::type>
2372 (std_cxx1x::bind(fun_ptr, std_cxx1x::ref(c), std_cxx1x::_1, std_cxx1x::_2, std_cxx1x::_3));
2382 template <
typename RT,
typename C,
2383 typename Arg1,
typename Arg2,
typename Arg3>
2385 internal::fun_encapsulator<RT,std_cxx1x::tuple<Arg1, Arg2, Arg3>,3>
2389 template <typename RT, typename C,
2390 typename Arg1, typename Arg2, typename Arg3>
2393 spawn (const C &c, RT (C::*fun_ptr)(Arg1,Arg2,Arg3) const)
2396 std_cxx1x::function<typename internal::fun_ptr<RT,std_cxx1x::tuple<Arg1,Arg2,Arg3> >::type>
2397 (std_cxx1x::bind(fun_ptr, std_cxx1x::cref(c), std_cxx1x::_1, std_cxx1x::_2, std_cxx1x::_3));
2411 template <
typename RT,
2412 typename Arg1,
typename Arg2,
typename Arg3,
typename Arg4>
2414 internal::fun_encapsulator<RT,std_cxx1x::tuple<Arg1, Arg2, Arg3, Arg4>,4>
2418 template <typename RT,
2419 typename Arg1, typename Arg2, typename Arg3, typename Arg4>
2422 spawn (RT (*fun_ptr)(Arg1,Arg2,Arg3,Arg4))
2436 template <
typename RT,
typename C,
2437 typename Arg1,
typename Arg2,
typename Arg3,
typename Arg4>
2439 internal::fun_encapsulator<RT,std_cxx1x::tuple<Arg1, Arg2, Arg3, Arg4>,4>
2443 template <typename RT, typename C,
2444 typename Arg1, typename Arg2, typename Arg3, typename Arg4>
2447 spawn (C &c, RT (C::*fun_ptr)(Arg1,Arg2,Arg3,Arg4))
2450 std_cxx1x::function<typename internal::fun_ptr<RT,std_cxx1x::tuple<Arg1, Arg2, Arg3, Arg4> >::type>
2451 (std_cxx1x::bind(fun_ptr, std_cxx1x::ref(c), std_cxx1x::_1, std_cxx1x::_2, std_cxx1x::_3, std_cxx1x::_4));
2461 template <
typename RT,
typename C,
2462 typename Arg1,
typename Arg2,
typename Arg3,
typename Arg4>
2464 internal::fun_encapsulator<RT,std_cxx1x::tuple<Arg1, Arg2, Arg3, Arg4>,4>
2468 template <typename RT, typename C,
2469 typename Arg1, typename Arg2, typename Arg3, typename Arg4>
2472 spawn (const C &c, RT (C::*fun_ptr)(Arg1,Arg2,Arg3,Arg4) const)
2475 std_cxx1x::function<typename internal::fun_ptr<RT,std_cxx1x::tuple<Arg1, Arg2, Arg3, Arg4> >::type>
2476 (std_cxx1x::bind(fun_ptr, std_cxx1x::cref(c), std_cxx1x::_1, std_cxx1x::_2, std_cxx1x::_3, std_cxx1x::_4));
2489 template <
typename RT,
2490 typename Arg1,
typename Arg2,
typename Arg3,
2491 typename Arg4,
typename Arg5>
2493 internal::fun_encapsulator<RT,std_cxx1x::tuple<Arg1, Arg2, Arg3, Arg4, Arg5>,5>
2497 template <typename RT,
2498 typename Arg1, typename Arg2, typename Arg3,
2499 typename Arg4, typename Arg5>
2502 spawn (RT (*fun_ptr)(Arg1,Arg2,Arg3,Arg4,Arg5))
2516 template <
typename RT,
typename C,
2517 typename Arg1,
typename Arg2,
typename Arg3,
2518 typename Arg4,
typename Arg5>
2520 internal::fun_encapsulator<RT,std_cxx1x::tuple<Arg1, Arg2, Arg3, Arg4, Arg5>,5>
2524 template <typename RT, typename C,
2525 typename Arg1, typename Arg2, typename Arg3,
2526 typename Arg4, typename Arg5>
2529 spawn (C &c, RT (C::*fun_ptr)(Arg1,Arg2,Arg3,Arg4,Arg5))
2532 std_cxx1x::function<typename internal::fun_ptr<RT,std_cxx1x::tuple<Arg1, Arg2, Arg3, Arg4, Arg5> >::type>
2533 (std_cxx1x::bind(fun_ptr, std_cxx1x::ref(c), std_cxx1x::_1, std_cxx1x::_2, std_cxx1x::_3, std_cxx1x::_4, std_cxx1x::_5));
2543 template <
typename RT,
typename C,
2544 typename Arg1,
typename Arg2,
typename Arg3,
2545 typename Arg4,
typename Arg5>
2547 internal::fun_encapsulator<RT,std_cxx1x::tuple<Arg1, Arg2, Arg3, Arg4, Arg5>,5>
2551 template <typename RT, typename C,
2552 typename Arg1, typename Arg2, typename Arg3,
2553 typename Arg4, typename Arg5>
2556 spawn (const C &c, RT (C::*fun_ptr)(Arg1,Arg2,Arg3,Arg4,Arg5) const)
2559 std_cxx1x::function<typename internal::fun_ptr<RT,std_cxx1x::tuple<Arg1, Arg2, Arg3, Arg4, Arg5> >::type>
2560 (std_cxx1x::bind(fun_ptr, std_cxx1x::cref(c), std_cxx1x::_1, std_cxx1x::_2, std_cxx1x::_3, std_cxx1x::_4, std_cxx1x::_5));
2573 template <
typename RT,
2574 typename Arg1,
typename Arg2,
typename Arg3,
2575 typename Arg4,
typename Arg5,
typename Arg6>
2577 internal::fun_encapsulator<RT,std_cxx1x::tuple<Arg1, Arg2, Arg3, Arg4, Arg5, Arg6>,6>
2581 template <typename RT,
2582 typename Arg1, typename Arg2, typename Arg3,
2583 typename Arg4, typename Arg5, typename Arg6>
2585 internal::fun_encapsulator<RT,
std_cxx1x::tuple<Arg1, Arg2, Arg3, Arg4, Arg5, Arg6>,6>
2586 spawn (RT (*fun_ptr)(Arg1,Arg2,Arg3,Arg4,Arg5,Arg6))
2600 template <
typename RT,
typename C,
2601 typename Arg1,
typename Arg2,
typename Arg3,
2602 typename Arg4,
typename Arg5,
typename Arg6>
2604 internal::fun_encapsulator<RT,std_cxx1x::tuple<Arg1, Arg2, Arg3, Arg4, Arg5, Arg6>,6>
2608 template <typename RT, typename C,
2609 typename Arg1, typename Arg2, typename Arg3,
2610 typename Arg4, typename Arg5, typename Arg6>
2612 internal::fun_encapsulator<RT,
std_cxx1x::tuple<Arg1, Arg2, Arg3, Arg4, Arg5, Arg6>,6>
2613 spawn (C &c, RT (C::*fun_ptr)(Arg1,Arg2,Arg3,Arg4,Arg5,Arg6))
2616 std_cxx1x::function<typename internal::fun_ptr<RT,std_cxx1x::tuple<Arg1, Arg2, Arg3, Arg4, Arg5, Arg6> >::type>
2617 (std_cxx1x::bind(fun_ptr, std_cxx1x::ref(c), std_cxx1x::_1, std_cxx1x::_2, std_cxx1x::_3, std_cxx1x::_4, std_cxx1x::_5, std_cxx1x::_6));
2627 template <
typename RT,
typename C,
2628 typename Arg1,
typename Arg2,
typename Arg3,
2629 typename Arg4,
typename Arg5,
typename Arg6>
2631 internal::fun_encapsulator<RT,
2632 std_cxx1x::tuple<Arg1, Arg2, Arg3, Arg4, Arg5, Arg6>,6>
2636 template <typename RT, typename C,
2637 typename Arg1, typename Arg2, typename Arg3,
2638 typename Arg4, typename Arg5, typename Arg6>
2641 std_cxx1x::tuple<Arg1, Arg2, Arg3, Arg4, Arg5, Arg6>,6>
2642 spawn (const C &c, RT (C::*fun_ptr)(Arg1,Arg2,Arg3,Arg4,Arg5,Arg6) const)
2645 std_cxx1x::function<typename internal::fun_ptr<RT,std_cxx1x::tuple<Arg1, Arg2, Arg3, Arg4, Arg5, Arg6> >::type>
2646 (std_cxx1x::bind(fun_ptr, std_cxx1x::cref(c), std_cxx1x::_1, std_cxx1x::_2, std_cxx1x::_3, std_cxx1x::_4, std_cxx1x::_5, std_cxx1x::_6));
2659 template <
typename RT,
2660 typename Arg1,
typename Arg2,
typename Arg3,
2661 typename Arg4,
typename Arg5,
typename Arg6,
2664 internal::fun_encapsulator<RT,std_cxx1x::tuple<Arg1, Arg2, Arg3,
2665 Arg4, Arg5, Arg6, Arg7>,7>
2669 template <typename RT,
2670 typename Arg1, typename Arg2, typename Arg3,
2671 typename Arg4, typename Arg5, typename Arg6,
2675 Arg4, Arg5, Arg6, Arg7>,7>
2676 spawn (RT (*fun_ptr)(Arg1,Arg2,Arg3,Arg4,Arg5,Arg6,Arg7))
2690 template <
typename RT,
typename C,
2691 typename Arg1,
typename Arg2,
typename Arg3,
2692 typename Arg4,
typename Arg5,
typename Arg6,
2695 internal::fun_encapsulator<RT,std_cxx1x::tuple<Arg1, Arg2, Arg3,
2696 Arg4, Arg5, Arg6, Arg7>,7>
2700 template <typename RT, typename C,
2701 typename Arg1, typename Arg2, typename Arg3,
2702 typename Arg4, typename Arg5, typename Arg6,
2706 Arg4, Arg5, Arg6, Arg7>,7>
2707 spawn (C &c, RT (C::*fun_ptr)(Arg1,Arg2,Arg3,Arg4,Arg5,Arg6,Arg7))
2710 std_cxx1x::function<typename internal::fun_ptr<RT,std_cxx1x::tuple<Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7> >::type>
2711 (std_cxx1x::bind(fun_ptr, std_cxx1x::ref(c), std_cxx1x::_1, std_cxx1x::_2, std_cxx1x::_3, std_cxx1x::_4, std_cxx1x::_5, std_cxx1x::_6, std_cxx1x::_7));
2721 template <
typename RT,
typename C,
2722 typename Arg1,
typename Arg2,
typename Arg3,
2723 typename Arg4,
typename Arg5,
typename Arg6,
2726 internal::fun_encapsulator<RT,
2727 std_cxx1x::tuple<Arg1, Arg2, Arg3,
2728 Arg4, Arg5, Arg6, Arg7>,7>
2732 template <typename RT, typename C,
2733 typename Arg1, typename Arg2, typename Arg3,
2734 typename Arg4, typename Arg5, typename Arg6,
2739 Arg4, Arg5, Arg6, Arg7>,7>
2740 spawn (const C &c, RT (C::*fun_ptr)(Arg1,Arg2,Arg3,Arg4,Arg5,Arg6,Arg7) const)
2743 std_cxx1x::function<typename internal::fun_ptr<RT,std_cxx1x::tuple<Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7> >::type>
2744 (std_cxx1x::bind(fun_ptr, std_cxx1x::cref(c), std_cxx1x::_1, std_cxx1x::_2, std_cxx1x::_3, std_cxx1x::_4, std_cxx1x::_5, std_cxx1x::_6, std_cxx1x::_7));
2757 template <
typename RT,
2758 typename Arg1,
typename Arg2,
typename Arg3,
2759 typename Arg4,
typename Arg5,
typename Arg6,
2760 typename Arg7,
typename Arg8>
2762 internal::fun_encapsulator<RT,std_cxx1x::tuple<Arg1, Arg2, Arg3,
2765 spawn (RT (*fun_ptr)(Arg1,Arg2,Arg3,Arg4,Arg5,
2769 template <typename RT,
2770 typename Arg1, typename Arg2, typename Arg3,
2771 typename Arg4, typename Arg5, typename Arg6,
2772 typename Arg7, typename Arg8>
2777 spawn (RT (*fun_ptr)(Arg1,Arg2,Arg3,Arg4,Arg5,
2792 template <
typename RT,
typename C,
2793 typename Arg1,
typename Arg2,
typename Arg3,
2794 typename Arg4,
typename Arg5,
typename Arg6,
2795 typename Arg7,
typename Arg8>
2797 internal::fun_encapsulator<RT,std_cxx1x::tuple<Arg1, Arg2, Arg3,
2800 spawn (C &c, RT (C::*fun_ptr)(Arg1,Arg2,Arg3,Arg4,Arg5,
2804 template <typename RT, typename C,
2805 typename Arg1, typename Arg2, typename Arg3,
2806 typename Arg4, typename Arg5, typename Arg6,
2807 typename Arg7, typename Arg8>
2812 spawn (C &c, RT (C::*fun_ptr)(Arg1,Arg2,Arg3,Arg4,Arg5,
2816 std_cxx1x::function<typename internal::fun_ptr<RT,std_cxx1x::tuple<Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8> >::type>
2817 (std_cxx1x::bind(fun_ptr, std_cxx1x::ref(c), std_cxx1x::_1, std_cxx1x::_2, std_cxx1x::_3, std_cxx1x::_4, std_cxx1x::_5, std_cxx1x::_6, std_cxx1x::_7, std_cxx1x::_8));
2827 template <
typename RT,
typename C,
2828 typename Arg1,
typename Arg2,
typename Arg3,
2829 typename Arg4,
typename Arg5,
typename Arg6,
2830 typename Arg7,
typename Arg8>
2832 internal::fun_encapsulator<RT,
2833 std_cxx1x::tuple<Arg1, Arg2, Arg3,
2836 spawn (
const C &c, RT (C::*fun_ptr)(Arg1,Arg2,Arg3,Arg4,Arg5,
2840 template <typename RT, typename C,
2841 typename Arg1, typename Arg2, typename Arg3,
2842 typename Arg4, typename Arg5, typename Arg6,
2843 typename Arg7, typename Arg8>
2849 spawn (const C &c, RT (C::*fun_ptr)(Arg1,Arg2,Arg3,Arg4,Arg5,
2850 Arg6,Arg7,Arg8) const)
2853 std_cxx1x::function<typename internal::fun_ptr<RT,std_cxx1x::tuple<Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8> >::type>
2854 (std_cxx1x::bind(fun_ptr, std_cxx1x::cref(c), std_cxx1x::_1, std_cxx1x::_2, std_cxx1x::_3, std_cxx1x::_4, std_cxx1x::_5, std_cxx1x::_6, std_cxx1x::_7, std_cxx1x::_8));
2867 template <
typename RT,
2868 typename Arg1,
typename Arg2,
typename Arg3,
2869 typename Arg4,
typename Arg5,
typename Arg6,
2870 typename Arg7,
typename Arg8,
typename Arg9>
2872 internal::fun_encapsulator<RT,std_cxx1x::tuple<Arg1, Arg2, Arg3,
2874 Arg7, Arg8, Arg9>,9>
2875 spawn (RT (*fun_ptr)(Arg1,Arg2,Arg3,Arg4,Arg5,
2879 template <typename RT,
2880 typename Arg1, typename Arg2, typename Arg3,
2881 typename Arg4, typename Arg5, typename Arg6,
2882 typename Arg7, typename Arg8, typename Arg9>
2886 Arg7, Arg8, Arg9>,9>
2887 spawn (RT (*fun_ptr)(Arg1,Arg2,Arg3,Arg4,Arg5,
2888 Arg6,Arg7,Arg8,Arg9))
2902 template <
typename RT,
typename C,
2903 typename Arg1,
typename Arg2,
typename Arg3,
2904 typename Arg4,
typename Arg5,
typename Arg6,
2905 typename Arg7,
typename Arg8,
typename Arg9>
2907 internal::fun_encapsulator<RT,std_cxx1x::tuple<Arg1, Arg2, Arg3,
2909 Arg7, Arg8, Arg9>,9>
2910 spawn (C &c, RT (C::*fun_ptr)(Arg1,Arg2,Arg3,Arg4,Arg5,
2914 template <typename RT, typename C,
2915 typename Arg1, typename Arg2, typename Arg3,
2916 typename Arg4, typename Arg5, typename Arg6,
2917 typename Arg7, typename Arg8, typename Arg9>
2921 Arg7, Arg8, Arg9>,9>
2922 spawn (C &c, RT (C::*fun_ptr)(Arg1,Arg2,Arg3,Arg4,Arg5,
2923 Arg6,Arg7,Arg8,Arg9))
2926 std_cxx1x::function<typename internal::fun_ptr<RT,std_cxx1x::tuple<Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8, Arg9> >::type>
2927 (std_cxx1x::bind(fun_ptr, std_cxx1x::ref(c), std_cxx1x::_1, std_cxx1x::_2, std_cxx1x::_3, std_cxx1x::_4, std_cxx1x::_5, std_cxx1x::_6, std_cxx1x::_7, std_cxx1x::_8, std_cxx1x::_9));
2937 template <
typename RT,
typename C,
2938 typename Arg1,
typename Arg2,
typename Arg3,
2939 typename Arg4,
typename Arg5,
typename Arg6,
2940 typename Arg7,
typename Arg8,
typename Arg9>
2942 internal::fun_encapsulator<RT,
2943 std_cxx1x::tuple<Arg1, Arg2, Arg3,
2945 Arg7, Arg8, Arg9>,9>
2946 spawn (
const C &c, RT (C::*fun_ptr)(Arg1,Arg2,Arg3,Arg4,Arg5,
2950 template <typename RT, typename C,
2951 typename Arg1, typename Arg2, typename Arg3,
2952 typename Arg4, typename Arg5, typename Arg6,
2953 typename Arg7, typename Arg8, typename Arg9>
2958 Arg7, Arg8, Arg9>,9>
2959 spawn (const C &c, RT (C::*fun_ptr)(Arg1,Arg2,Arg3,Arg4,Arg5,
2960 Arg6,Arg7,Arg8,Arg9) const)
2963 std_cxx1x::function<typename internal::fun_ptr<RT,std_cxx1x::tuple<Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8, Arg9> >::type>
2964 (std_cxx1x::bind(fun_ptr, std_cxx1x::cref(c), std_cxx1x::_1, std_cxx1x::_2, std_cxx1x::_3, std_cxx1x::_4, std_cxx1x::_5, std_cxx1x::_6, std_cxx1x::_7, std_cxx1x::_8, std_cxx1x::_9));
2981 template <
typename RT>
2996 template <
typename RT>
3012 template <
typename RT,
typename C>
3016 typename identity<C>::type &c)
3020 (std_cxx1x::bind(fun_ptr, std_cxx1x::ref(c)));
3024 #ifndef DEAL_II_CONST_MEMBER_DEDUCTION_BUG
3032 template <
typename RT,
typename C>
3036 const typename identity<C>::type &c)
3040 (std_cxx1x::bind(fun_ptr, std_cxx1x::cref(c)));
3055 template <
typename RT,
typename Arg1>
3059 typename identity<Arg1>::type arg1)
3063 (std_cxx1x::bind(fun_ptr,
3076 template <
typename RT,
typename C,
typename Arg1>
3080 typename identity<C>::type &c,
3081 typename identity<Arg1>::type arg1)
3085 (std_cxx1x::bind(fun_ptr, std_cxx1x::ref(c),
3089 #ifndef DEAL_II_CONST_MEMBER_DEDUCTION_BUG
3097 template <
typename RT,
typename C,
typename Arg1>
3101 typename identity<const C>::type &c,
3102 typename identity<Arg1>::type arg1)
3106 (std_cxx1x::bind(fun_ptr, std_cxx1x::cref(c),
3120 template <
typename RT,
typename Arg1,
typename Arg2>
3124 typename identity<Arg1>::type arg1,
3125 typename identity<Arg2>::type arg2)
3129 (std_cxx1x::bind(fun_ptr,
3143 template <
typename RT,
typename C,
typename Arg1,
typename Arg2>
3147 typename identity<C>::type &c,
3148 typename identity<Arg1>::type arg1,
3149 typename identity<Arg2>::type arg2)
3153 (std_cxx1x::bind(fun_ptr, std_cxx1x::ref(c),
3158 #ifndef DEAL_II_CONST_MEMBER_DEDUCTION_BUG
3166 template <
typename RT,
typename C,
typename Arg1,
typename Arg2>
3170 typename identity<const C>::type &c,
3171 typename identity<Arg1>::type arg1,
3172 typename identity<Arg2>::type arg2)
3176 (std_cxx1x::bind(fun_ptr, std_cxx1x::cref(c),
3191 template <
typename RT,
3192 typename Arg1,
typename Arg2,
typename Arg3>
3196 typename identity<Arg1>::type arg1,
3197 typename identity<Arg2>::type arg2,
3198 typename identity<Arg3>::type arg3)
3202 (std_cxx1x::bind(fun_ptr,
3217 template <
typename RT,
typename C,
3218 typename Arg1,
typename Arg2,
typename Arg3>
3222 typename identity<C>::type &c,
3223 typename identity<Arg1>::type arg1,
3224 typename identity<Arg2>::type arg2,
3225 typename identity<Arg3>::type arg3)
3229 (std_cxx1x::bind(fun_ptr, std_cxx1x::ref(c),
3235 #ifndef DEAL_II_CONST_MEMBER_DEDUCTION_BUG
3243 template <
typename RT,
typename C,
3244 typename Arg1,
typename Arg2,
typename Arg3>
3248 typename identity<const C>::type &c,
3249 typename identity<Arg1>::type arg1,
3250 typename identity<Arg2>::type arg2,
3251 typename identity<Arg3>::type arg3)
3255 (std_cxx1x::bind(fun_ptr, std_cxx1x::cref(c),
3272 template <
typename RT,
3273 typename Arg1,
typename Arg2,
typename Arg3,
typename Arg4>
3277 typename identity<Arg1>::type arg1,
3278 typename identity<Arg2>::type arg2,
3279 typename identity<Arg3>::type arg3,
3280 typename identity<Arg4>::type arg4)
3284 (std_cxx1x::bind(fun_ptr,
3300 template <
typename RT,
typename C,
3301 typename Arg1,
typename Arg2,
typename Arg3,
typename Arg4>
3305 typename identity<C>::type &c,
3306 typename identity<Arg1>::type arg1,
3307 typename identity<Arg2>::type arg2,
3308 typename identity<Arg3>::type arg3,
3309 typename identity<Arg4>::type arg4)
3313 (std_cxx1x::bind(fun_ptr, std_cxx1x::ref(c),
3320 #ifndef DEAL_II_CONST_MEMBER_DEDUCTION_BUG
3328 template <
typename RT,
typename C,
3329 typename Arg1,
typename Arg2,
typename Arg3,
typename Arg4>
3333 typename identity<const C>::type &c,
3334 typename identity<Arg1>::type arg1,
3335 typename identity<Arg2>::type arg2,
3336 typename identity<Arg3>::type arg3,
3337 typename identity<Arg4>::type arg4)
3341 (std_cxx1x::bind(fun_ptr, std_cxx1x::cref(c),
3358 template <
typename RT,
3359 typename Arg1,
typename Arg2,
typename Arg3,
3360 typename Arg4,
typename Arg5>
3364 typename identity<Arg1>::type arg1,
3365 typename identity<Arg2>::type arg2,
3366 typename identity<Arg3>::type arg3,
3367 typename identity<Arg4>::type arg4,
3368 typename identity<Arg5>::type arg5)
3372 (std_cxx1x::bind(fun_ptr,
3389 template <
typename RT,
typename C,
3390 typename Arg1,
typename Arg2,
typename Arg3,
3391 typename Arg4,
typename Arg5>
3395 typename identity<C>::type &c,
3396 typename identity<Arg1>::type arg1,
3397 typename identity<Arg2>::type arg2,
3398 typename identity<Arg3>::type arg3,
3399 typename identity<Arg4>::type arg4,
3400 typename identity<Arg5>::type arg5)
3404 (std_cxx1x::bind(fun_ptr, std_cxx1x::ref(c),
3412 #ifndef DEAL_II_CONST_MEMBER_DEDUCTION_BUG
3420 template <
typename RT,
typename C,
3421 typename Arg1,
typename Arg2,
typename Arg3,
3422 typename Arg4,
typename Arg5>
3426 typename identity<const C>::type &c,
3427 typename identity<Arg1>::type arg1,
3428 typename identity<Arg2>::type arg2,
3429 typename identity<Arg3>::type arg3,
3430 typename identity<Arg4>::type arg4,
3431 typename identity<Arg5>::type arg5)
3435 (std_cxx1x::bind(fun_ptr, std_cxx1x::cref(c),
3453 template <
typename RT,
3454 typename Arg1,
typename Arg2,
typename Arg3,
3455 typename Arg4,
typename Arg5,
typename Arg6>
3459 typename identity<Arg1>::type arg1,
3460 typename identity<Arg2>::type arg2,
3461 typename identity<Arg3>::type arg3,
3462 typename identity<Arg4>::type arg4,
3463 typename identity<Arg5>::type arg5,
3464 typename identity<Arg6>::type arg6)
3468 (std_cxx1x::bind(fun_ptr,
3486 template <
typename RT,
typename C,
3487 typename Arg1,
typename Arg2,
typename Arg3,
3488 typename Arg4,
typename Arg5,
typename Arg6>
3492 typename identity<C>::type &c,
3493 typename identity<Arg1>::type arg1,
3494 typename identity<Arg2>::type arg2,
3495 typename identity<Arg3>::type arg3,
3496 typename identity<Arg4>::type arg4,
3497 typename identity<Arg5>::type arg5,
3498 typename identity<Arg6>::type arg6)
3502 (std_cxx1x::bind(fun_ptr, std_cxx1x::ref(c),
3511 #ifndef DEAL_II_CONST_MEMBER_DEDUCTION_BUG
3519 template <
typename RT,
typename C,
3520 typename Arg1,
typename Arg2,
typename Arg3,
3521 typename Arg4,
typename Arg5,
typename Arg6>
3524 new_thread (RT (C::*fun_ptr)(Arg1,Arg2,Arg3,Arg4,Arg5,Arg6)
const,
3525 typename identity<const C>::type &c,
3526 typename identity<Arg1>::type arg1,
3527 typename identity<Arg2>::type arg2,
3528 typename identity<Arg3>::type arg3,
3529 typename identity<Arg4>::type arg4,
3530 typename identity<Arg5>::type arg5,
3531 typename identity<Arg6>::type arg6)
3535 (std_cxx1x::bind(fun_ptr, std_cxx1x::cref(c),
3554 template <
typename RT,
3555 typename Arg1,
typename Arg2,
typename Arg3,
3556 typename Arg4,
typename Arg5,
typename Arg6,
3561 typename identity<Arg1>::type arg1,
3562 typename identity<Arg2>::type arg2,
3563 typename identity<Arg3>::type arg3,
3564 typename identity<Arg4>::type arg4,
3565 typename identity<Arg5>::type arg5,
3566 typename identity<Arg6>::type arg6,
3567 typename identity<Arg7>::type arg7)
3571 (std_cxx1x::bind(fun_ptr,
3590 template <
typename RT,
typename C,
3591 typename Arg1,
typename Arg2,
typename Arg3,
3592 typename Arg4,
typename Arg5,
typename Arg6,
3596 new_thread (RT (C::*fun_ptr)(Arg1,Arg2,Arg3,Arg4,Arg5,Arg6,Arg7),
3597 typename identity<C>::type &c,
3598 typename identity<Arg1>::type arg1,
3599 typename identity<Arg2>::type arg2,
3600 typename identity<Arg3>::type arg3,
3601 typename identity<Arg4>::type arg4,
3602 typename identity<Arg5>::type arg5,
3603 typename identity<Arg6>::type arg6,
3604 typename identity<Arg7>::type arg7)
3608 (std_cxx1x::bind(fun_ptr, std_cxx1x::ref(c),
3618 #ifndef DEAL_II_CONST_MEMBER_DEDUCTION_BUG
3626 template <
typename RT,
typename C,
3627 typename Arg1,
typename Arg2,
typename Arg3,
3628 typename Arg4,
typename Arg5,
typename Arg6,
3632 new_thread (RT (C::*fun_ptr)(Arg1,Arg2,Arg3,Arg4,Arg5,Arg6,Arg7)
const,
3633 typename identity<const C>::type &c,
3634 typename identity<Arg1>::type arg1,
3635 typename identity<Arg2>::type arg2,
3636 typename identity<Arg3>::type arg3,
3637 typename identity<Arg4>::type arg4,
3638 typename identity<Arg5>::type arg5,
3639 typename identity<Arg6>::type arg6,
3640 typename identity<Arg7>::type arg7)
3644 (std_cxx1x::bind(fun_ptr, std_cxx1x::cref(c),
3664 template <
typename RT,
3665 typename Arg1,
typename Arg2,
typename Arg3,
3666 typename Arg4,
typename Arg5,
typename Arg6,
3667 typename Arg7,
typename Arg8>
3672 typename identity<Arg1>::type arg1,
3673 typename identity<Arg2>::type arg2,
3674 typename identity<Arg3>::type arg3,
3675 typename identity<Arg4>::type arg4,
3676 typename identity<Arg5>::type arg5,
3677 typename identity<Arg6>::type arg6,
3678 typename identity<Arg7>::type arg7,
3679 typename identity<Arg8>::type arg8)
3683 (std_cxx1x::bind(fun_ptr,
3703 template <
typename RT,
typename C,
3704 typename Arg1,
typename Arg2,
typename Arg3,
3705 typename Arg4,
typename Arg5,
typename Arg6,
3706 typename Arg7,
typename Arg8>
3711 typename identity<C>::type &c,
3712 typename identity<Arg1>::type arg1,
3713 typename identity<Arg2>::type arg2,
3714 typename identity<Arg3>::type arg3,
3715 typename identity<Arg4>::type arg4,
3716 typename identity<Arg5>::type arg5,
3717 typename identity<Arg6>::type arg6,
3718 typename identity<Arg7>::type arg7,
3719 typename identity<Arg8>::type arg8)
3723 (std_cxx1x::bind(fun_ptr, std_cxx1x::ref(c),
3734 #ifndef DEAL_II_CONST_MEMBER_DEDUCTION_BUG
3742 template <
typename RT,
typename C,
3743 typename Arg1,
typename Arg2,
typename Arg3,
3744 typename Arg4,
typename Arg5,
typename Arg6,
3745 typename Arg7,
typename Arg8>
3749 Arg6,Arg7,Arg8)
const,
3750 typename identity<const C>::type &c,
3751 typename identity<Arg1>::type arg1,
3752 typename identity<Arg2>::type arg2,
3753 typename identity<Arg3>::type arg3,
3754 typename identity<Arg4>::type arg4,
3755 typename identity<Arg5>::type arg5,
3756 typename identity<Arg6>::type arg6,
3757 typename identity<Arg7>::type arg7,
3758 typename identity<Arg8>::type arg8)
3762 (std_cxx1x::bind(fun_ptr, std_cxx1x::cref(c),
3783 template <
typename RT,
3784 typename Arg1,
typename Arg2,
typename Arg3,
3785 typename Arg4,
typename Arg5,
typename Arg6,
3786 typename Arg7,
typename Arg8,
typename Arg9>
3790 Arg6,Arg7,Arg8,Arg9),
3791 typename identity<Arg1>::type arg1,
3792 typename identity<Arg2>::type arg2,
3793 typename identity<Arg3>::type arg3,
3794 typename identity<Arg4>::type arg4,
3795 typename identity<Arg5>::type arg5,
3796 typename identity<Arg6>::type arg6,
3797 typename identity<Arg7>::type arg7,
3798 typename identity<Arg8>::type arg8,
3799 typename identity<Arg9>::type arg9)
3803 (std_cxx1x::bind(fun_ptr,
3824 template <
typename RT,
typename C,
3825 typename Arg1,
typename Arg2,
typename Arg3,
3826 typename Arg4,
typename Arg5,
typename Arg6,
3827 typename Arg7,
typename Arg8,
typename Arg9>
3831 Arg6,Arg7,Arg8,Arg9),
3832 typename identity<C>::type &c,
3833 typename identity<Arg1>::type arg1,
3834 typename identity<Arg2>::type arg2,
3835 typename identity<Arg3>::type arg3,
3836 typename identity<Arg4>::type arg4,
3837 typename identity<Arg5>::type arg5,
3838 typename identity<Arg6>::type arg6,
3839 typename identity<Arg7>::type arg7,
3840 typename identity<Arg8>::type arg8,
3841 typename identity<Arg9>::type arg9)
3845 (std_cxx1x::bind(fun_ptr, std_cxx1x::ref(c),
3857 #ifndef DEAL_II_CONST_MEMBER_DEDUCTION_BUG
3865 template <
typename RT,
typename C,
3866 typename Arg1,
typename Arg2,
typename Arg3,
3867 typename Arg4,
typename Arg5,
typename Arg6,
3868 typename Arg7,
typename Arg8,
typename Arg9>
3872 Arg6,Arg7,Arg8,Arg9)
const,
3873 typename identity<const C>::type &c,
3874 typename identity<Arg1>::type arg1,
3875 typename identity<Arg2>::type arg2,
3876 typename identity<Arg3>::type arg3,
3877 typename identity<Arg4>::type arg4,
3878 typename identity<Arg5>::type arg5,
3879 typename identity<Arg6>::type arg6,
3880 typename identity<Arg7>::type arg7,
3881 typename identity<Arg8>::type arg8,
3882 typename identity<Arg9>::type arg9)
3886 (std_cxx1x::bind(fun_ptr, std_cxx1x::cref(c),
3912 template <
typename RT =
void>
3940 for (
typename std::list<
Thread<RT> >::const_iterator
3958 #ifdef DEAL_II_WITH_THREADS
3967 template <
typename RT>
3975 virtual tbb::task *execute ()
3984 catch (
const std::exception &exc)
3986 internal::handle_std_exception (exc);
3990 internal::handle_unknown_exception ();
4042 template <
typename RT>
4050 std_cxx1x::function<RT ()>
function;
4143 friend class ::Threads::Task<RT>;
4148 template <
typename RT>
4152 function (function),
4153 task_is_done (false)
4157 template <
typename RT>
4167 task =
new (tbb::task::allocate_root()) tbb::empty_task;
4168 task->set_ref_count (2);
4171 task->spawn (*worker);
4176 template <
typename RT>
4184 template <
typename RT>
4192 template <
typename RT>
4220 task->destroy (*task);
4224 template <
typename RT>
4242 if (task_is_done ==
true)
4247 task_is_done =
true;
4248 task->wait_for_all();
4253 #else // no threading enabled
4261 template <
typename RT>
4279 call (
function, ret_val);
4288 static void join () {}
4319 template <
typename RT =
void>
4328 Task (
const std_cxx1x::function<RT ()> &function_object)
4334 std_cxx1x::shared_ptr<internal::TaskDescriptor<RT> >
4442 template <
typename RT>
4457 template <
typename RT>
4462 return new_task<RT>(std_cxx1x::function<RT ()>(fun_ptr));
4473 template <
typename RT,
typename C>
4477 typename identity<C>::type &c)
4481 (std_cxx1x::bind(fun_ptr, std_cxx1x::ref(c)));
4484 #ifndef DEAL_II_CONST_MEMBER_DEDUCTION_BUG
4492 template <
typename RT,
typename C>
4496 const typename identity<C>::type &c)
4500 (std_cxx1x::bind(fun_ptr, std_cxx1x::cref(c)));
4515 template <
typename RT,
typename Arg1>
4519 typename identity<Arg1>::type arg1)
4523 (std_cxx1x::bind(fun_ptr,
4536 template <
typename RT,
typename C,
typename Arg1>
4540 typename identity<C>::type &c,
4541 typename identity<Arg1>::type arg1)
4545 (std_cxx1x::bind(fun_ptr, std_cxx1x::ref(c),
4549 #ifndef DEAL_II_CONST_MEMBER_DEDUCTION_BUG
4557 template <
typename RT,
typename C,
typename Arg1>
4561 typename identity<const C>::type &c,
4562 typename identity<Arg1>::type arg1)
4566 (std_cxx1x::bind(fun_ptr, std_cxx1x::cref(c),
4580 template <
typename RT,
typename Arg1,
typename Arg2>
4584 typename identity<Arg1>::type arg1,
4585 typename identity<Arg2>::type arg2)
4589 (std_cxx1x::bind(fun_ptr,
4603 template <
typename RT,
typename C,
typename Arg1,
typename Arg2>
4607 typename identity<C>::type &c,
4608 typename identity<Arg1>::type arg1,
4609 typename identity<Arg2>::type arg2)
4613 (std_cxx1x::bind(fun_ptr, std_cxx1x::ref(c),
4618 #ifndef DEAL_II_CONST_MEMBER_DEDUCTION_BUG
4626 template <
typename RT,
typename C,
typename Arg1,
typename Arg2>
4630 typename identity<const C>::type &c,
4631 typename identity<Arg1>::type arg1,
4632 typename identity<Arg2>::type arg2)
4636 (std_cxx1x::bind(fun_ptr, std_cxx1x::cref(c),
4651 template <
typename RT,
4652 typename Arg1,
typename Arg2,
typename Arg3>
4656 typename identity<Arg1>::type arg1,
4657 typename identity<Arg2>::type arg2,
4658 typename identity<Arg3>::type arg3)
4662 (std_cxx1x::bind(fun_ptr,
4677 template <
typename RT,
typename C,
4678 typename Arg1,
typename Arg2,
typename Arg3>
4682 typename identity<C>::type &c,
4683 typename identity<Arg1>::type arg1,
4684 typename identity<Arg2>::type arg2,
4685 typename identity<Arg3>::type arg3)
4689 (std_cxx1x::bind(fun_ptr, std_cxx1x::ref(c),
4695 #ifndef DEAL_II_CONST_MEMBER_DEDUCTION_BUG
4703 template <
typename RT,
typename C,
4704 typename Arg1,
typename Arg2,
typename Arg3>
4708 typename identity<const C>::type &c,
4709 typename identity<Arg1>::type arg1,
4710 typename identity<Arg2>::type arg2,
4711 typename identity<Arg3>::type arg3)
4715 (std_cxx1x::bind(fun_ptr, std_cxx1x::cref(c),
4732 template <
typename RT,
4733 typename Arg1,
typename Arg2,
typename Arg3,
typename Arg4>
4737 typename identity<Arg1>::type arg1,
4738 typename identity<Arg2>::type arg2,
4739 typename identity<Arg3>::type arg3,
4740 typename identity<Arg4>::type arg4)
4744 (std_cxx1x::bind(fun_ptr,
4760 template <
typename RT,
typename C,
4761 typename Arg1,
typename Arg2,
typename Arg3,
typename Arg4>
4765 typename identity<C>::type &c,
4766 typename identity<Arg1>::type arg1,
4767 typename identity<Arg2>::type arg2,
4768 typename identity<Arg3>::type arg3,
4769 typename identity<Arg4>::type arg4)
4773 (std_cxx1x::bind(fun_ptr, std_cxx1x::ref(c),
4780 #ifndef DEAL_II_CONST_MEMBER_DEDUCTION_BUG
4788 template <
typename RT,
typename C,
4789 typename Arg1,
typename Arg2,
typename Arg3,
typename Arg4>
4793 typename identity<const C>::type &c,
4794 typename identity<Arg1>::type arg1,
4795 typename identity<Arg2>::type arg2,
4796 typename identity<Arg3>::type arg3,
4797 typename identity<Arg4>::type arg4)
4801 (std_cxx1x::bind(fun_ptr, std_cxx1x::cref(c),
4818 template <
typename RT,
4819 typename Arg1,
typename Arg2,
typename Arg3,
4820 typename Arg4,
typename Arg5>
4824 typename identity<Arg1>::type arg1,
4825 typename identity<Arg2>::type arg2,
4826 typename identity<Arg3>::type arg3,
4827 typename identity<Arg4>::type arg4,
4828 typename identity<Arg5>::type arg5)
4832 (std_cxx1x::bind(fun_ptr,
4849 template <
typename RT,
typename C,
4850 typename Arg1,
typename Arg2,
typename Arg3,
4851 typename Arg4,
typename Arg5>
4855 typename identity<C>::type &c,
4856 typename identity<Arg1>::type arg1,
4857 typename identity<Arg2>::type arg2,
4858 typename identity<Arg3>::type arg3,
4859 typename identity<Arg4>::type arg4,
4860 typename identity<Arg5>::type arg5)
4864 (std_cxx1x::bind(fun_ptr, std_cxx1x::ref(c),
4872 #ifndef DEAL_II_CONST_MEMBER_DEDUCTION_BUG
4880 template <
typename RT,
typename C,
4881 typename Arg1,
typename Arg2,
typename Arg3,
4882 typename Arg4,
typename Arg5>
4885 new_task (RT (C::*fun_ptr)(Arg1,Arg2,Arg3,Arg4,Arg5)
const,
4886 typename identity<const C>::type &c,
4887 typename identity<Arg1>::type arg1,
4888 typename identity<Arg2>::type arg2,
4889 typename identity<Arg3>::type arg3,
4890 typename identity<Arg4>::type arg4,
4891 typename identity<Arg5>::type arg5)
4895 (std_cxx1x::bind(fun_ptr, std_cxx1x::cref(c),
4913 template <
typename RT,
4914 typename Arg1,
typename Arg2,
typename Arg3,
4915 typename Arg4,
typename Arg5,
typename Arg6>
4918 new_task (RT (*fun_ptr)(Arg1,Arg2,Arg3,Arg4,Arg5,Arg6),
4919 typename identity<Arg1>::type arg1,
4920 typename identity<Arg2>::type arg2,
4921 typename identity<Arg3>::type arg3,
4922 typename identity<Arg4>::type arg4,
4923 typename identity<Arg5>::type arg5,
4924 typename identity<Arg6>::type arg6)
4928 (std_cxx1x::bind(fun_ptr,
4946 template <
typename RT,
typename C,
4947 typename Arg1,
typename Arg2,
typename Arg3,
4948 typename Arg4,
typename Arg5,
typename Arg6>
4951 new_task (RT (C::*fun_ptr)(Arg1,Arg2,Arg3,Arg4,Arg5,Arg6),
4952 typename identity<C>::type &c,
4953 typename identity<Arg1>::type arg1,
4954 typename identity<Arg2>::type arg2,
4955 typename identity<Arg3>::type arg3,
4956 typename identity<Arg4>::type arg4,
4957 typename identity<Arg5>::type arg5,
4958 typename identity<Arg6>::type arg6)
4962 (std_cxx1x::bind(fun_ptr, std_cxx1x::ref(c),
4971 #ifndef DEAL_II_CONST_MEMBER_DEDUCTION_BUG
4979 template <
typename RT,
typename C,
4980 typename Arg1,
typename Arg2,
typename Arg3,
4981 typename Arg4,
typename Arg5,
typename Arg6>
4984 new_task (RT (C::*fun_ptr)(Arg1,Arg2,Arg3,Arg4,Arg5,Arg6)
const,
4985 typename identity<const C>::type &c,
4986 typename identity<Arg1>::type arg1,
4987 typename identity<Arg2>::type arg2,
4988 typename identity<Arg3>::type arg3,
4989 typename identity<Arg4>::type arg4,
4990 typename identity<Arg5>::type arg5,
4991 typename identity<Arg6>::type arg6)
4995 (std_cxx1x::bind(fun_ptr, std_cxx1x::cref(c),
5014 template <
typename RT,
5015 typename Arg1,
typename Arg2,
typename Arg3,
5016 typename Arg4,
typename Arg5,
typename Arg6,
5020 new_task (RT (*fun_ptr)(Arg1,Arg2,Arg3,Arg4,Arg5,Arg6,Arg7),
5021 typename identity<Arg1>::type arg1,
5022 typename identity<Arg2>::type arg2,
5023 typename identity<Arg3>::type arg3,
5024 typename identity<Arg4>::type arg4,
5025 typename identity<Arg5>::type arg5,
5026 typename identity<Arg6>::type arg6,
5027 typename identity<Arg7>::type arg7)
5031 (std_cxx1x::bind(fun_ptr,
5050 template <
typename RT,
typename C,
5051 typename Arg1,
typename Arg2,
typename Arg3,
5052 typename Arg4,
typename Arg5,
typename Arg6,
5056 new_task (RT (C::*fun_ptr)(Arg1,Arg2,Arg3,Arg4,Arg5,Arg6,Arg7),
5057 typename identity<C>::type &c,
5058 typename identity<Arg1>::type arg1,
5059 typename identity<Arg2>::type arg2,
5060 typename identity<Arg3>::type arg3,
5061 typename identity<Arg4>::type arg4,
5062 typename identity<Arg5>::type arg5,
5063 typename identity<Arg6>::type arg6,
5064 typename identity<Arg7>::type arg7)
5068 (std_cxx1x::bind(fun_ptr, std_cxx1x::ref(c),
5078 #ifndef DEAL_II_CONST_MEMBER_DEDUCTION_BUG
5086 template <
typename RT,
typename C,
5087 typename Arg1,
typename Arg2,
typename Arg3,
5088 typename Arg4,
typename Arg5,
typename Arg6,
5092 new_task (RT (C::*fun_ptr)(Arg1,Arg2,Arg3,Arg4,Arg5,Arg6,Arg7)
const,
5093 typename identity<const C>::type &c,
5094 typename identity<Arg1>::type arg1,
5095 typename identity<Arg2>::type arg2,
5096 typename identity<Arg3>::type arg3,
5097 typename identity<Arg4>::type arg4,
5098 typename identity<Arg5>::type arg5,
5099 typename identity<Arg6>::type arg6,
5100 typename identity<Arg7>::type arg7)
5104 (std_cxx1x::bind(fun_ptr, std_cxx1x::cref(c),
5124 template <
typename RT,
5125 typename Arg1,
typename Arg2,
typename Arg3,
5126 typename Arg4,
typename Arg5,
typename Arg6,
5127 typename Arg7,
typename Arg8>
5132 typename identity<Arg1>::type arg1,
5133 typename identity<Arg2>::type arg2,
5134 typename identity<Arg3>::type arg3,
5135 typename identity<Arg4>::type arg4,
5136 typename identity<Arg5>::type arg5,
5137 typename identity<Arg6>::type arg6,
5138 typename identity<Arg7>::type arg7,
5139 typename identity<Arg8>::type arg8)
5143 (std_cxx1x::bind(fun_ptr,
5163 template <
typename RT,
typename C,
5164 typename Arg1,
typename Arg2,
typename Arg3,
5165 typename Arg4,
typename Arg5,
typename Arg6,
5166 typename Arg7,
typename Arg8>
5171 typename identity<C>::type &c,
5172 typename identity<Arg1>::type arg1,
5173 typename identity<Arg2>::type arg2,
5174 typename identity<Arg3>::type arg3,
5175 typename identity<Arg4>::type arg4,
5176 typename identity<Arg5>::type arg5,
5177 typename identity<Arg6>::type arg6,
5178 typename identity<Arg7>::type arg7,
5179 typename identity<Arg8>::type arg8)
5183 (std_cxx1x::bind(fun_ptr, std_cxx1x::ref(c),
5194 #ifndef DEAL_II_CONST_MEMBER_DEDUCTION_BUG
5202 template <
typename RT,
typename C,
5203 typename Arg1,
typename Arg2,
typename Arg3,
5204 typename Arg4,
typename Arg5,
typename Arg6,
5205 typename Arg7,
typename Arg8>
5209 Arg6,Arg7,Arg8)
const,
5210 typename identity<const C>::type &c,
5211 typename identity<Arg1>::type arg1,
5212 typename identity<Arg2>::type arg2,
5213 typename identity<Arg3>::type arg3,
5214 typename identity<Arg4>::type arg4,
5215 typename identity<Arg5>::type arg5,
5216 typename identity<Arg6>::type arg6,
5217 typename identity<Arg7>::type arg7,
5218 typename identity<Arg8>::type arg8)
5222 (std_cxx1x::bind(fun_ptr, std_cxx1x::cref(c),
5243 template <
typename RT,
5244 typename Arg1,
typename Arg2,
typename Arg3,
5245 typename Arg4,
typename Arg5,
typename Arg6,
5246 typename Arg7,
typename Arg8,
typename Arg9>
5250 Arg6,Arg7,Arg8,Arg9),
5251 typename identity<Arg1>::type arg1,
5252 typename identity<Arg2>::type arg2,
5253 typename identity<Arg3>::type arg3,
5254 typename identity<Arg4>::type arg4,
5255 typename identity<Arg5>::type arg5,
5256 typename identity<Arg6>::type arg6,
5257 typename identity<Arg7>::type arg7,
5258 typename identity<Arg8>::type arg8,
5259 typename identity<Arg9>::type arg9)
5263 (std_cxx1x::bind(fun_ptr,
5284 template <
typename RT,
typename C,
5285 typename Arg1,
typename Arg2,
typename Arg3,
5286 typename Arg4,
typename Arg5,
typename Arg6,
5287 typename Arg7,
typename Arg8,
typename Arg9>
5291 Arg6,Arg7,Arg8,Arg9),
5292 typename identity<C>::type &c,
5293 typename identity<Arg1>::type arg1,
5294 typename identity<Arg2>::type arg2,
5295 typename identity<Arg3>::type arg3,
5296 typename identity<Arg4>::type arg4,
5297 typename identity<Arg5>::type arg5,
5298 typename identity<Arg6>::type arg6,
5299 typename identity<Arg7>::type arg7,
5300 typename identity<Arg8>::type arg8,
5301 typename identity<Arg9>::type arg9)
5305 (std_cxx1x::bind(fun_ptr, std_cxx1x::ref(c),
5317 #ifndef DEAL_II_CONST_MEMBER_DEDUCTION_BUG
5325 template <
typename RT,
typename C,
5326 typename Arg1,
typename Arg2,
typename Arg3,
5327 typename Arg4,
typename Arg5,
typename Arg6,
5328 typename Arg7,
typename Arg8,
typename Arg9>
5332 Arg6,Arg7,Arg8,Arg9)
const,
5333 typename identity<const C>::type &c,
5334 typename identity<Arg1>::type arg1,
5335 typename identity<Arg2>::type arg2,
5336 typename identity<Arg3>::type arg3,
5337 typename identity<Arg4>::type arg4,
5338 typename identity<Arg5>::type arg5,
5339 typename identity<Arg6>::type arg6,
5340 typename identity<Arg7>::type arg7,
5341 typename identity<Arg8>::type arg8,
5342 typename identity<Arg9>::type arg9)
5346 (std_cxx1x::bind(fun_ptr, std_cxx1x::cref(c),
5381 template <
typename RT =
void>
5391 tasks.push_back (t);
5409 for (
typename std::list<
Task<RT> >::const_iterator
5429 DEAL_II_NAMESPACE_CLOSE
std::vector< std::pair< ForwardIterator, ForwardIterator > > split_range(const ForwardIterator &begin, const ForwardIterator &end, const unsigned int n_intervals)
unsigned int this_thread_id()
Task(const Task< RT > &t)
Thread(const Thread< RT > &t)
TaskDescriptor< RT > & task_descriptor
std::list< Task< RT > > tasks
ScopedLock(DummyThreadMutex &)
#define AssertThrow(cond, exc)
PosixThreadBarrier(const unsigned int count, const char *name=0, void *arg=0)
Thread< RT > new_thread(const std_cxx1x::function< RT()> &function)
std_cxx1x::shared_ptr< internal::TaskDescriptor< RT > > task_descriptor
bool operator==(const Task &t)
Task(const std_cxx1x::function< RT()> &function_object)
void start(const std_cxx1x::function< RT()> &function)
std::vector< std::pair< unsigned int, unsigned int > > split_interval(const unsigned int begin, const unsigned int end, const unsigned int n_intervals)
DummyBarrier(const unsigned int count, const char *name=0, void *arg=0)
void wait(DummyThreadMutex &) const
#define Assert(cond, exc)
static void thread_entry_point(const std_cxx1x::function< RT()> function, std_cxx1x::shared_ptr< return_value< RT > > ret_val)
std_cxx1x::shared_ptr< internal::ThreadDescriptor< RT > > thread_descriptor
unsigned int n_existing_threads()
BlockCompressedSparsityPattern CompressedBlockSparsityPattern DEAL_II_DEPRECATED
bool operator==(const Thread &t)
return_value< RT > ret_val
DeclException1(ExcBarrierSizeNotUseful, int,<< "In single-thread mode, other barrier sizes than 1 are not "<< "useful. You gave "<< arg1)
Mutex ThreadMutex DEAL_II_DEPRECATED
std_cxx1x::function< RT()> function
TaskGroup & operator+=(const Task< RT > &t)
std_cxx1x::shared_ptr< return_value< RT > > ret_val
ThreadGroup & operator+=(const Thread< RT > &t)
PosixThreadBarrier Barrier
internal::fun_encapsulator< RT, std_cxx1x::tuple<>, 0 > spawn(RT(*fun_ptr)()) DEAL_II_DEPRECATED
Mutex thread_is_active_mutex
pthread_barrier_t barrier
Thread(const std_cxx1x::function< RT()> &function)
Task< RT > new_task(const std_cxx1x::function< RT()> &function)
::ExceptionBase & ExcInternalError()
std::list< Thread< RT > > threads
DeclException0(ExcNoTask)
std_cxx1x::condition_variable condition_variable