summaryrefslogtreecommitdiffstats
path: root/src/boost/libs/thread/tutorial/factorial3.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/boost/libs/thread/tutorial/factorial3.cpp')
-rw-r--r--src/boost/libs/thread/tutorial/factorial3.cpp36
1 files changed, 36 insertions, 0 deletions
diff --git a/src/boost/libs/thread/tutorial/factorial3.cpp b/src/boost/libs/thread/tutorial/factorial3.cpp
new file mode 100644
index 000000000..2515bfeab
--- /dev/null
+++ b/src/boost/libs/thread/tutorial/factorial3.cpp
@@ -0,0 +1,36 @@
+// Copyright (C) 2001-2003
+// William E. Kempf
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#include <boost/thread/thread.hpp>
+#include <iostream>
+
+const int NUM_CALCS=5;
+
+class factorial
+{
+public:
+ factorial(int x, int& res) : x(x), res(res) { }
+ void operator()() { res = calculate(x); }
+ int result() const { return res; }
+
+private:
+ int calculate(int x) { return x <= 1 ? 1 : x * calculate(x-1); }
+
+private:
+ int x;
+ int& res;
+};
+
+int main()
+{
+ int results[NUM_CALCS];
+ boost::thread_group thrds;
+ for (int i=0; i < NUM_CALCS; ++i)
+ thrds.create_thread(factorial(i*10, results[i]));
+ thrds.join_all();
+ for (int j=0; j < NUM_CALCS; ++j)
+ std::cout << j*10 << "! = " << results[j] << std::endl;
+}