來(lái)源自我的博客
http://www.yingzinanfei.com/2017/03/07/cduoxianchengxiangjie/
atomic atomic atomic_boolatomic_intatomic_longatomic_flagthread thread類(lèi)創(chuàng)建線程,接受函數(shù)和函數(shù)參數(shù)作為thread類(lèi)參數(shù)mutex mutex類(lèi),互斥量 mutex 最基本的Mutex類(lèi)recursive_mutex 遞歸Mutex類(lèi),允許同一線程對(duì)互斥量多次上鎖(遞歸上鎖),來(lái)獲得互斥量對(duì)象的多層所有權(quán)。釋放互斥量時(shí)需要調(diào)用與該鎖層次深度相同次數(shù)的unlock()time_mutex 定時(shí)Mutex類(lèi) try_lock_for() 接受一個(gè)時(shí)間范圍,表示在這一段時(shí)間范圍之內(nèi)線程如果沒(méi)有獲得鎖則被阻塞住,如果在此期間其他線程釋放了鎖,則該線程可以獲得互斥量的鎖,如果超時(shí)返回falsetry_lock_until() 接受一個(gè)時(shí)間點(diǎn)作為參數(shù),在指定時(shí)間點(diǎn)未到來(lái)之前線程如果沒(méi)有獲得鎖則被阻塞住,如果在此期間其他線程釋放了鎖,則該線程可以獲得對(duì)互斥量的鎖,如果超時(shí)返回falserecursive_timed_mutex 定時(shí)遞歸Mutex類(lèi)Lock類(lèi) lock_guard 與Mutex RAII相關(guān),方便線程對(duì)互斥量上鎖 模板類(lèi),template class lock_guard;lock_guard對(duì)象通常用于管理某個(gè)鎖對(duì)象在某個(gè)lock_guard對(duì)象的聲明周期內(nèi),它所管理的鎖對(duì)象會(huì)一直保持上鎖狀態(tài)。而lock_guard的生命周期結(jié)束之后,它所管理的鎖對(duì)象會(huì)被解鎖。不負(fù)責(zé)管理Mutex對(duì)象的生命周期,只是簡(jiǎn)化了Mutex對(duì)象的上鎖和解鎖操作,方便線程對(duì)互斥量上鎖。構(gòu)造函數(shù)explicit lock_guard(mutex_type& m); locking初始化,在構(gòu)造時(shí)對(duì)m進(jìn)行上鎖lock_guard(mutex_type& m, adopt_lock_t tag); adopting初始化,在Mutex對(duì)象m已經(jīng)被當(dāng)前線程鎖住后調(diào)用lock_guard(const lock_guard&) = delete; 拷貝構(gòu)造和移動(dòng)構(gòu)造均被禁用unique_lock 與Mutex RAII相關(guān),方便線程對(duì)互斥量上鎖,但提供了更好的上鎖和解鎖控制 以獨(dú)占所有權(quán)的方式管理mutex對(duì)象的上鎖和解鎖操作構(gòu)造函數(shù) unique_lock() noexcept; 默認(rèn)構(gòu)造函數(shù),不管理任何Mutex對(duì)象explicit unique_lock(mutex_type& m); locking初始化,管理Mutex對(duì)象m,并嘗試調(diào)用m.lock()對(duì)Mutex對(duì)象進(jìn)行上鎖,如果此時(shí)另外某個(gè)unique_lock對(duì)象已經(jīng)管理了該Mutex對(duì)象m,則當(dāng)前線程將會(huì)被阻塞unique_lock(mutex_type& m, try_to_lock_t tag); try_locking初始化,嘗試上鎖不成功時(shí)不會(huì)阻塞當(dāng)前線程unique_lock(mutex_type&m, defer_lock_t tag) noexcept; deferred初始化,初始化時(shí)并不鎖住Mutex對(duì)象,m應(yīng)該是一個(gè)沒(méi)有當(dāng)前線程鎖住的Mutex對(duì)象unique_lock(mutex_type&m, adopt_lock_t tag); adopting初始化,m應(yīng)該是一個(gè)已經(jīng)被當(dāng)前線程鎖住的Mutex對(duì)象。template<class Rep, class Period> unique_lock(mutex_type& m, const chrono::duration<Rep, Period>& rel_time); locking一段時(shí)間,試圖調(diào)用m.try_lock_for來(lái)鎖住Mutex對(duì)象一段時(shí)間(rel_time)template<class Clock, class Duration> unique_lock(mutex_type& m, const chrono::time_point<Clock, Duration>& abs_time); locking到某個(gè)時(shí)間點(diǎn)(abs_time)之前unique_lock(const unique_lock&) = delete; 拷貝構(gòu)造被禁用unique_lock(unique_lock&& x); 移動(dòng)構(gòu)造被禁用其他類(lèi)型 once_flagadopt_lock_tdefer_lock_ttry_to_lock_t函數(shù) lock() 可以同時(shí)對(duì)多個(gè)互斥量上鎖 如果該互斥量當(dāng)前沒(méi)有被鎖住,則調(diào)用線程將該互斥量鎖住,直到調(diào)用unlock之前,該線程一直擁有該鎖如果當(dāng)前互斥量被其他線程鎖住,則當(dāng)前的調(diào)用線程被阻塞住如果當(dāng)前互斥量被當(dāng)前調(diào)用線程鎖住,則會(huì)發(fā)生死鎖(deadlock)try_lock() 嘗試同時(shí)對(duì)多個(gè)互斥量上鎖,如果互斥量被其他線程占有,則當(dāng)前線程也不會(huì)被阻塞 如果該互斥量當(dāng)前沒(méi)有被鎖住,則調(diào)用線程將該互斥量鎖住,直到調(diào)用unlock之前,該線程一直擁有該鎖如果當(dāng)前互斥量被其他線程鎖住,則當(dāng)前的調(diào)用線程返回false,并不會(huì)被阻塞掉如果當(dāng)前互斥量被當(dāng)前調(diào)用線程鎖住,則會(huì)發(fā)生死鎖(deadlock)unlock() 解鎖condition_variable 條件變量。當(dāng)condition_variable對(duì)象的某個(gè)wait函數(shù)被調(diào)用的時(shí)候,它使用unique_lock(通過(guò)mutex)來(lái)鎖住當(dāng)前線程。當(dāng)前線程會(huì)一直阻塞,直到另外一個(gè)線程在相同的condition_variable對(duì)象上調(diào)用了notification函數(shù)來(lái)喚醒當(dāng)前線程 condition_variable類(lèi) 通常使用unique_lock來(lái)等待 構(gòu)造函數(shù) condition_variable();condition_variable(const codition_variable&) = delete; 拷貝構(gòu)造函數(shù)被禁用condition_variable::wait()函數(shù) void wait(unique_lock<mutex>& lck); 當(dāng)前線程調(diào)用wait()后將阻塞,直到另外某個(gè)線程調(diào)用notify_*喚醒當(dāng)前線程。在線程被阻塞時(shí),該函數(shù)會(huì)自動(dòng)調(diào)用lck.unlock()釋放鎖,使得其他阻塞在鎖競(jìng)爭(zhēng)上的線程得以繼續(xù)執(zhí)行。另外,一旦當(dāng)前線程獲得通知,wait()函數(shù)也是自動(dòng)調(diào)用lck.lock(),使得lck的狀態(tài)和wait函數(shù)被調(diào)用時(shí)相同template<class PRedicate> void wait(unique_lock<mutex>& lck, Predicate pred); 只有當(dāng)pred條件為false時(shí)調(diào)用wait()都會(huì)阻塞當(dāng)前線程,并且在收到其他線程的通知后只有當(dāng)pred為true時(shí)才會(huì)被解除阻塞。類(lèi)似于`while(!pred()) wait(lck);condition_variable::wait_for()函數(shù) 可以指定一個(gè)時(shí)間段condition_variable::wait_until()函數(shù) 可以指定一個(gè)時(shí)間點(diǎn)condition_variable::notify_one()介紹 喚醒某個(gè)等待線程。如果當(dāng)前沒(méi)有等待線程,則該函數(shù)什么也不做。如果同時(shí)存在多個(gè)等待線程,則喚醒某個(gè)線程是不確定的condition_variable::notify_all()介紹 喚醒所有等待線程。condition_variable_any 通常使用另外的lockable類(lèi)型來(lái)等待。wait函數(shù)可以接受任何lockable參數(shù)cv_status 枚舉類(lèi)型 cv_status::no_timeout wait_for或者wait_until沒(méi)有超時(shí),即在規(guī)定的時(shí)間段內(nèi)線程收到了通知cv_status::timeout wait_for或者wait_until超時(shí)notify_all_at_thread_exitfuture Provider類(lèi) promise promise對(duì)象可以保存某一類(lèi)型T的值,該值可被future對(duì)象讀?。赡茉诹硗庖粋€(gè)線程中),因此promise也提供了一種線程同步的手段在promise對(duì)象構(gòu)造時(shí)可以和一個(gè)共享狀態(tài)(通常是std::future)相關(guān)聯(lián),并可以在相關(guān)聯(lián)的共享狀態(tài)(std::future)上保存一個(gè)類(lèi)型為T(mén)的值可以通過(guò)get_future來(lái)獲取與該promise對(duì)象相關(guān)聯(lián)的fuure對(duì)象,調(diào)用該函數(shù)之后,兩個(gè)對(duì)象共享相同的共享狀態(tài)(shared state)promise對(duì)象是異步Provider,它可以在某一時(shí)刻設(shè)置共享狀態(tài)的值future對(duì)象可以異步返回共享狀態(tài)的值,或者在必要的情況下阻塞調(diào)用者并等待共享狀態(tài)標(biāo)志變?yōu)閞eady,然后才能獲取共享狀態(tài)的值。構(gòu)造函數(shù) promise(); 默認(rèn)構(gòu)造函數(shù),初始化一個(gè)空的共享狀態(tài)template <class Alloc> promise(allocator_arg_t aa, const Alloc& alloc); 帶自定義內(nèi)存分配器的構(gòu)造函數(shù),與默認(rèn)構(gòu)造函數(shù)類(lèi)似,但是使用自定義分配器來(lái)分配共享狀態(tài)promise(const promise&) = delete; 拷貝構(gòu)造函數(shù)被禁用promise(promise&& x) noexcept; 移動(dòng)構(gòu)造函數(shù)promise的Operator=沒(méi)有拷貝語(yǔ)義,即普通的賦值操作被禁用。operator=只有move語(yǔ)義,所以promise對(duì)象是禁止拷貝的成員函數(shù) promise::get_future() 該函數(shù)返回一個(gè)與promise共享狀態(tài)相關(guān)聯(lián)的future。返回的future對(duì)象可以訪問(wèn)由promise對(duì)象設(shè)置在共享狀態(tài)上的值或者某個(gè)異常對(duì)象。只能從promise共享狀態(tài)獲取一個(gè)future對(duì)象。在調(diào)用該函數(shù)之后,promise對(duì)象通常會(huì)在某個(gè)時(shí)間點(diǎn)準(zhǔn)備好(設(shè)置一個(gè)值或者一個(gè)異常對(duì)象),如果不設(shè)置值或者異常,promise對(duì)象在析構(gòu)時(shí)會(huì)自動(dòng)地設(shè)置一個(gè)future_error異常(broken_promise)來(lái)設(shè)置其自身的準(zhǔn)備狀態(tài)promise::set_value() 設(shè)置共享狀態(tài)的值, 此后promise的共享標(biāo)志變?yōu)閞eadypromise::set_exception() 為promise設(shè)置異常,此后promise的共享狀態(tài)標(biāo)志變?yōu)閞eadypackage_taskFutures類(lèi) futureshared_future其他類(lèi)型 future_errorfuture_errcfuture_statuslaunchasync()函數(shù)future_category()函數(shù)新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注