1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253 |
- // (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 <iostream> // std::cout
- #include <boost/thread/scoped_thread.hpp>
- #include <boost/thread/with_lock_guard.hpp>
- 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;
- }
|