// (C) Copyright 2013 Ruslan Baratov // Copyright (C) 2014 Vicente Botet // // 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) // See www.boost.org/libs/thread for documentation. #define BOOST_THREAD_VERSION 4 #include // std::cout #include #include boost::mutex m; // protection for 'x' and 'std::cout' int x; #if defined(BOOST_NO_CXX11_LAMBDAS) || (defined BOOST_MSVC && _MSC_VER < 1700) void print_x() { ++x; std::cout << "x = " << x << std::endl; } void job() { for (int i = 0; i < 10; ++i) { boost::with_lock_guard(m, print_x); boost::this_thread::sleep_for(boost::chrono::milliseconds(100)); } } #else void job() { for (int i = 0; i < 10; ++i) { boost::with_lock_guard( m, []() { ++x; std::cout << "x = " << x << std::endl; } ); boost::this_thread::sleep_for(boost::chrono::milliseconds(100)); } } #endif int main() { #if defined(BOOST_NO_CXX11_LAMBDAS) || (defined BOOST_MSVC && _MSC_VER < 1700) std::cout << "(no lambdas)" << std::endl; #endif boost::scoped_thread<> thread_1((boost::thread(job))); boost::scoped_thread<> thread_2((boost::thread(job))); boost::scoped_thread<> thread_3((boost::thread(job))); return 0; }