1 // (C) Copyright 2013 Ruslan Baratov 2 // Copyright (C) 2014 Vicente Botet 3 // 4 // Distributed under the Boost Software License, Version 1.0. (See accompanying 5 // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) 6 7 // See www.boost.org/libs/thread for documentation. 8 9 #define BOOST_THREAD_VERSION 4 10 11 #include <iostream> // std::cout 12 #include <boost/thread/scoped_thread.hpp> 13 #include <boost/thread/with_lock_guard.hpp> 14 15 boost::mutex m; // protection for 'x' and 'std::cout' 16 int x; 17 18 #if defined(BOOST_NO_CXX11_LAMBDAS) || (defined BOOST_MSVC && _MSC_VER < 1700) print_x()19void print_x() { 20 ++x; 21 std::cout << "x = " << x << std::endl; 22 } 23 job()24void job() { 25 for (int i = 0; i < 10; ++i) { 26 boost::with_lock_guard(m, print_x); 27 boost::this_thread::sleep_for(boost::chrono::milliseconds(100)); 28 } 29 } 30 #else job()31void job() { 32 for (int i = 0; i < 10; ++i) { 33 boost::with_lock_guard( 34 m, 35 []() { 36 ++x; 37 std::cout << "x = " << x << std::endl; 38 } 39 ); 40 boost::this_thread::sleep_for(boost::chrono::milliseconds(100)); 41 } 42 } 43 #endif 44 main()45int main() { 46 #if defined(BOOST_NO_CXX11_LAMBDAS) || (defined BOOST_MSVC && _MSC_VER < 1700) 47 std::cout << "(no lambdas)" << std::endl; 48 #endif 49 boost::scoped_thread<> thread_1((boost::thread(job))); 50 boost::scoped_thread<> thread_2((boost::thread(job))); 51 boost::scoped_thread<> thread_3((boost::thread(job))); 52 return 0; 53 } 54