#include #include #include #include #include class Something { private: int val; public: Something(){}; Something(int i):val(i){}; void set_val(int i) {val=i;}; int get_val() {return val;}; }; class Numbers { public: boost::atomic sum,t1,t2; Numbers():sum(0),t1(0),t2(0){}; }; class Thread1 { public: void run(Numbers& c) { int i(100000); while(i-->0) ++c.sum,c.t1++; } }; class Thread2 { public: void run(Numbers& c) { int i(100000); while(i-->0) c.sum++,c.t2++; } }; class Display { public: void run(Numbers& n) { int i(103); while(i-->0) { int sum(n.sum); int t1(n.t1); int t2(n.t2); int SUM(t1+t2); std::cout << n.sum << " " << n.t1 << " " << n.t2 << " .. " << SUM << " " << (int)(SUM==sum) << "\n"; } } }; int main(int argc, char** argv) { Numbers num; std::vector > v; v.resize(100); Thread1 t1; Thread2 t2; Display disp; boost::thread_group run; run.create_thread(boost::bind(&Thread1::run,boost::ref(t1), boost::ref(num))); run.create_thread(boost::bind(&Thread2::run,boost::ref(t2), boost::ref(num))); run.create_thread(boost::bind(&Display::run,boost::ref(disp),boost::ref(num))); run.join_all(); }