Ticket #2067: 2067.patch
File 2067.patch, 4.7 KB (added by , 14 years ago) |
---|
-
boost/thread/pthread/shared_mutex.hpp
10 10 #include <boost/assert.hpp> 11 11 #include <boost/static_assert.hpp> 12 12 #include <boost/thread/mutex.hpp> 13 #include <boost/thread/ thread.hpp>13 #include <boost/thread/detail/interruption_control.hpp> 14 14 #include <boost/thread/condition_variable.hpp> 15 15 16 16 #include <boost/config/abi_prefix.hpp> -
boost/thread/detail/interruption_control.hpp
1 #ifndef BOOST_THREAD_DETAIL_INTERRUPTION_CONTROL_HPP 2 #define BOOST_THREAD_DETAIL_INTERRUPTION_CONTROL_HPP 3 // Distributed under the Boost Software License, Version 1.0. (See 4 // accompanying file LICENSE_1_0.txt or copy at 5 // http://www.boost.org/LICENSE_1_0.txt) 6 7 #include <boost/thread/detail/config.hpp> 8 9 namespace boost 10 { 11 namespace this_thread 12 { 13 class BOOST_THREAD_DECL disable_interruption 14 { 15 disable_interruption(const disable_interruption&); 16 disable_interruption& operator=(const disable_interruption&); 17 18 bool interruption_was_enabled; 19 friend class restore_interruption; 20 public: 21 disable_interruption(); 22 ~disable_interruption(); 23 }; 24 25 class BOOST_THREAD_DECL restore_interruption 26 { 27 restore_interruption(const restore_interruption&); 28 restore_interruption& operator=(const restore_interruption&); 29 public: 30 explicit restore_interruption(disable_interruption& d); 31 ~restore_interruption(); 32 }; 33 } 34 } 35 #endif -
boost/thread/detail/thread.hpp
9 9 #include <ostream> 10 10 #include <boost/thread/detail/move.hpp> 11 11 #include <boost/thread/mutex.hpp> 12 #include <boost/thread/shared_mutex.hpp> 12 13 #include <boost/thread/xtime.hpp> 13 14 #include <boost/thread/detail/thread_heap_alloc.hpp> 15 #include <boost/thread/detail/interruption_control.hpp> 14 16 #include <boost/utility.hpp> 15 17 #include <boost/assert.hpp> 16 18 #include <list> … … 338 340 339 341 namespace this_thread 340 342 { 343 #if 0 // moved to interruption_control.hpp 341 344 class BOOST_THREAD_DECL disable_interruption 342 345 { 343 346 disable_interruption(const disable_interruption&); … … 358 361 explicit restore_interruption(disable_interruption& d); 359 362 ~restore_interruption(); 360 363 }; 364 #endif 361 365 362 366 thread::id BOOST_THREAD_DECL get_id(); 363 367 … … 496 500 template<typename F> 497 501 thread* create_thread(F threadfunc) 498 502 { 499 boost::lock_guard< mutex> guard(m);503 boost::lock_guard<shared_mutex> guard(m); 500 504 std::auto_ptr<thread> new_thread(new thread(threadfunc)); 501 505 threads.push_back(new_thread.get()); 502 506 return new_thread.release(); … … 506 510 { 507 511 if(thrd) 508 512 { 509 boost::lock_guard< mutex> guard(m);513 boost::lock_guard<shared_mutex> guard(m); 510 514 threads.push_back(thrd); 511 515 } 512 516 } 513 517 514 518 void remove_thread(thread* thrd) 515 519 { 516 boost::lock_guard< mutex> guard(m);520 boost::lock_guard<shared_mutex> guard(m); 517 521 std::list<thread*>::iterator const it=std::find(threads.begin(),threads.end(),thrd); 518 522 if(it!=threads.end()) 519 523 { … … 523 527 524 528 void join_all() 525 529 { 526 boost:: lock_guard<mutex> guard(m);530 boost::shared_lock<shared_mutex> guard(m); 527 531 528 532 for(std::list<thread*>::iterator it=threads.begin(),end=threads.end(); 529 533 it!=end; … … 535 539 536 540 void interrupt_all() 537 541 { 538 boost:: lock_guard<mutex> guard(m);542 boost::shared_lock<shared_mutex> guard(m); 539 543 540 544 for(std::list<thread*>::iterator it=threads.begin(),end=threads.end(); 541 545 it!=end; … … 547 551 548 552 size_t size() const 549 553 { 550 boost:: lock_guard<mutex> guard(m);554 boost::shared_lock<shared_mutex> guard(m); 551 555 return threads.size(); 552 556 } 553 557 554 558 private: 555 559 std::list<thread*> threads; 556 mutable mutex m;560 mutable shared_mutex m; 557 561 }; 558 562 } 559 563