• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            ::^喬喬^::明鏡臺::原創空間::C#.NET2.0,C++技術BLOG
            人最重要的是心境,一顆平靜安穩的心才能更好的進步,保持自己的心態.成為夢想中的高手QQ群:8664695
            posts - 17,comments - 32,trackbacks - 0
            Boost 類庫是個開源的類庫,傳說中的準標準庫這下將會是我閱讀Boost 多線程源代碼的心得.

            費話少說,在使用BOOST的多線程我們都會引入boost/thread.hpp這一個文件好我們先找到這個文件將它打開

            ?1//?Copyright?(C)?2001-2003
            ?2//?William?E.?Kempf
            ?3//?(C)?Copyright?2008?Anthony?Williams
            ?4//
            ?5//?Distributed?under?the?Boost?Software?License,?Version?1.0.?(See?accompanying?
            ?6//?file?LICENSE_1_0.txt?or?copy?at?http://www.boost.org/LICENSE_1_0.txt)
            ?7
            ?8//??See?www.boost.org/libs/thread?for?documentation.
            ?9
            10#if?!defined(BOOST_THREAD_WEK01082003_HPP)
            11#define?BOOST_THREAD_WEK01082003_HPP
            12
            13#include?<boost/thread/thread.hpp>
            14#include?<boost/thread/condition_variable.hpp>
            15#include?<boost/thread/exceptions.hpp>
            16#include?<boost/thread/mutex.hpp>
            17#include?<boost/thread/once.hpp>
            18#include?<boost/thread/recursive_mutex.hpp>
            19#include?<boost/thread/tss.hpp>
            20#include?<boost/thread/thread_time.hpp>
            21#include?<boost/thread/locks.hpp>
            22#include?<boost/thread/shared_mutex.hpp>
            23#include?<boost/thread/barrier.hpp>
            24
            25#endif

            從這些代碼可以看出,boost/thread.hpp只是引用文件而已,看不到任何世界的C++代碼,
            我們順著這些#include一個一個打開
            先是#include?<boost/thread/thread.hpp>

            ?1#ifndef?BOOST_THREAD_THREAD_HPP
            ?2#define?BOOST_THREAD_THREAD_HPP
            ?3
            ?4//??thread.hpp
            ?5//
            ?6//??(C)?Copyright?2007-8?Anthony?Williams?
            ?7//
            ?8//??Distributed?under?the?Boost?Software?License,?Version?1.0.?(See
            ?9//??accompanying?file?LICENSE_1_0.txt?or?copy?at
            10//??http://www.boost.org/LICENSE_1_0.txt)
            11
            12#include?<boost/thread/detail/platform.hpp>
            13
            14#if?defined(BOOST_THREAD_PLATFORM_WIN32)
            15#include?<boost/thread/win32/thread_data.hpp>
            16#elif?defined(BOOST_THREAD_PLATFORM_PTHREAD)
            17#include?<boost/thread/pthread/thread_data.hpp>
            18#else
            19#error?"Boost?threads?unavailable?on?this?platform"
            20#endif
            21
            22#include?<boost/thread/detail/thread.hpp>
            23
            24
            25#endif
            26

            明顯這里是一個對不同平臺作出的定義,

            boost/thread/detail/是一個基本由宏定義組成的HPP文件,我們站且跳過
            我們以WIN32入手...
            #include?<boost/thread/win32/thread_data.hpp>
            ??1#ifndef?BOOST_THREAD_PTHREAD_THREAD_DATA_HPP
            ??2#define?BOOST_THREAD_PTHREAD_THREAD_DATA_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//?(C)?Copyright?2007?Anthony?Williams
            ??7
            ??8#include?<boost/thread/detail/config.hpp>
            ??9#include?<boost/thread/exceptions.hpp>
            ?10#include?<boost/shared_ptr.hpp>
            ?11#include?<boost/enable_shared_from_this.hpp>
            ?12#include?<boost/thread/mutex.hpp>
            ?13#include?<boost/optional.hpp>
            ?14#include?<pthread.h>
            ?15#include?"condition_variable_fwd.hpp"
            ?16
            ?17#include?<boost/config/abi_prefix.hpp>
            ?18
            ?19namespace?boost
            ?20{
            ?21????class?thread;
            ?22????
            ?23????namespace?detail
            ?24????{
            ?25????????struct?thread_exit_callback_node;
            ?26????????struct?tss_data_node;
            ?27
            ?28????????struct?thread_data_base;
            ?29????????typedef?boost::shared_ptr<thread_data_base>?thread_data_ptr;
            ?30????????
            ?31????????struct?BOOST_THREAD_DECL?thread_data_base:
            ?32????????????enable_shared_from_this<thread_data_base>
            ?33????????{
            ?34????????????thread_data_ptr?self;
            ?35????????????pthread_t?thread_handle;
            ?36????????????boost::mutex?data_mutex;
            ?37????????????boost::condition_variable?done_condition;
            ?38????????????boost::mutex?sleep_mutex;
            ?39????????????boost::condition_variable?sleep_condition;
            ?40????????????bool?done;
            ?41????????????bool?join_started;
            ?42????????????bool?joined;
            ?43????????????boost::detail::thread_exit_callback_node*?thread_exit_callbacks;
            ?44????????????boost::detail::tss_data_node*?tss_data;
            ?45????????????bool?interrupt_enabled;
            ?46????????????bool?interrupt_requested;
            ?47????????????pthread_cond_t*?current_cond;
            ?48
            ?49????????????thread_data_base():
            ?50????????????????done(false),join_started(false),joined(false),
            ?51????????????????thread_exit_callbacks(0),tss_data(0),
            ?52????????????????interrupt_enabled(true),
            ?53????????????????interrupt_requested(false),
            ?54????????????????current_cond(0)
            ?55????????????{}
            ?56????????????virtual?~thread_data_base();
            ?57
            ?58????????????typedef?pthread_t?native_handle_type;
            ?59
            ?60????????????virtual?void?run()=0;
            ?61????????}
            ;
            ?62
            ?63????????BOOST_THREAD_DECL?thread_data_base*?get_current_thread_data();
            ?64
            ?65????????class?interruption_checker
            ?66????????{
            ?67????????????thread_data_base*?const?thread_info;
            ?68
            ?69????????????void?check_for_interruption()
            ?70????????????{
            ?71????????????????if(thread_info->interrupt_requested)
            ?72????????????????{
            ?73????????????????????thread_info->interrupt_requested=false;
            ?74????????????????????throw?thread_interrupted();
            ?75????????????????}

            ?76????????????}

            ?77????????????
            ?78????????????void?operator=(interruption_checker&);
            ?79????????public:
            ?80????????????explicit?interruption_checker(pthread_cond_t*?cond):
            ?81????????????????thread_info(detail::get_current_thread_data())
            ?82????????????{
            ?83????????????????if(thread_info?&&?thread_info->interrupt_enabled)
            ?84????????????????{
            ?85????????????????????lock_guard<mutex>?guard(thread_info->data_mutex);
            ?86????????????????????check_for_interruption();
            ?87????????????????????thread_info->current_cond=cond;
            ?88????????????????}

            ?89????????????}

            ?90????????????~interruption_checker()
            ?91????????????{
            ?92????????????????if(thread_info?&&?thread_info->interrupt_enabled)
            ?93????????????????{
            ?94????????????????????lock_guard<mutex>?guard(thread_info->data_mutex);
            ?95????????????????????thread_info->current_cond=NULL;
            ?96????????????????????check_for_interruption();
            ?97????????????????}

            ?98????????????}

            ?99????????}
            ;
            100????}

            101
            102????namespace?this_thread
            103????{
            104????????void?BOOST_THREAD_DECL?yield();
            105????????
            106????????void?BOOST_THREAD_DECL?sleep(system_time?const&?abs_time);
            107????????
            108????????template<typename?TimeDuration>
            109????????inline?void?sleep(TimeDuration?const&?rel_time)
            110????????{
            111????????????this_thread::sleep(get_system_time()+rel_time);
            112????????}

            113????}

            114}

            115
            116#include?<boost/config/abi_suffix.hpp>
            117
            118#endif

            水平有限....貌似停留在只能自己看懂....
            posted on 2009-05-09 20:43 ^喬喬^ 閱讀(1960) 評論(1)  編輯 收藏 引用 所屬分類: c++

            FeedBack:
            # re: Boost 多線程源代碼解讀
            2015-06-15 23:20 | crax
            我對此表示很暈  回復  更多評論
              
            精品永久久福利一区二区| 久久久久久久久久久精品尤物 | 久久天天婷婷五月俺也去| 久久国产欧美日韩精品免费| 精品国产青草久久久久福利| 国内精品久久久久| 亚洲人成无码www久久久| 无码久久精品国产亚洲Av影片| 狠狠色噜噜狠狠狠狠狠色综合久久| 欧美久久综合九色综合| 久久久久人妻一区二区三区vr | 2020久久精品亚洲热综合一本| 蜜臀av性久久久久蜜臀aⅴ麻豆 | 麻豆av久久av盛宴av| 国产精品久久久久久| 热久久最新网站获取| 66精品综合久久久久久久| 亚洲中文字幕无码久久综合网| 国产精品99久久精品爆乳| 久久国产色AV免费观看| 精品一二三区久久aaa片| 久久99精品久久久久久齐齐| 国产亚洲综合久久系列| 久久精品国产99久久久古代| 亚洲美日韩Av中文字幕无码久久久妻妇| 久久久久人妻精品一区二区三区| 亚洲伊人久久综合影院| 国产精品无码久久综合网| 久久综合九色综合精品| 大伊人青草狠狠久久| 99久久国产综合精品麻豆| 亚洲人成伊人成综合网久久久| 中文字幕精品久久| 日韩电影久久久被窝网| 亚洲国产天堂久久久久久| 欧美日韩成人精品久久久免费看| 精品人妻伦九区久久AAA片69| 伊人丁香狠狠色综合久久| 99热热久久这里只有精品68| 久久精品这里热有精品| 久久精品国产秦先生|