国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C++ > 正文

c++多線程詳解

2019-11-06 06:16:15
字體:
來源:轉載
供稿:網(wǎng)友

來源自我的博客

http://www.yingzinanfei.com/2017/03/07/cduoxianchengxiangjie/

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

圖片精選

主站蜘蛛池模板: 盐城市| 资源县| 安阳市| 金坛市| 宁南县| 麟游县| 申扎县| 蒙山县| 于都县| 呼伦贝尔市| 宣恩县| 榆中县| 德安县| 中阳县| 桑植县| 永嘉县| 嘉祥县| 安吉县| 蓝田县| 绵阳市| 柯坪县| 高淳县| 通州区| 奈曼旗| 揭阳市| 项城市| 正镶白旗| 平阴县| 同德县| 商都县| 荥阳市| 文水县| 云浮市| 平舆县| 新昌县| 刚察县| 金华市| 池州市| 嘉祥县| 阿拉善右旗| 金溪县|