// (C) Copyright 2009-2012 Anthony Williams// (C) Copyright 2012 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)#if __cplusplus < 201103Lint main(){return 0;}#else#define BOOST_THREAD_VERSION 3#include <iostream>#include <boost/thread/scoped_thread.hpp>#include <thread>#include <cassert>void do_something(int& i){++i;}void f(int, int){}struct func{int& i;func(int& i_) :i(i_){}void operator()(){for (unsigned j = 0; j < 1000000; ++j){do_something(i);}}};void do_something_in_current_thread(){}using strict_scoped_thread = boost::strict_scoped_thread<boost::join_if_joinable, std::thread>;using scoped_thread = boost::scoped_thread<boost::join_if_joinable, std::thread>;int main(){{int some_local_state=0;strict_scoped_thread t( (std::thread(func(some_local_state))));do_something_in_current_thread();}{int some_local_state=0;std::thread t(( func(some_local_state) ));strict_scoped_thread g( (boost::move(t)) );do_something_in_current_thread();}{int some_local_state=0;std::thread t(( func(some_local_state) ));strict_scoped_thread g( (std::move(t)) );do_something_in_current_thread();}{int some_local_state=1;scoped_thread t( (std::thread(func(some_local_state))));if (t.joinable()) {t.join();assert( ! t.joinable() );}elsedo_something_in_current_thread();}#if 0try{int some_local_state=1;std::thread t(( func(some_local_state) ));scoped_thread g( (boost::move(t)) );if (g.joinable()) {// CLANG crash hereg.detach();assert( ! g.joinable() );}do_something_in_current_thread();}catch (...) {assert( false);}#endif{scoped_thread g( &f, 1, 2 );do_something_in_current_thread();}return 0;}#endif
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。