54 lines
1.4 KiB
C++
54 lines
1.4 KiB
C++
// (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;
|
|
}
|