一.std::condition_variable類
必須與std::unique_lock配合使用
std::condition_variable_any類
更加通用的條件變數,可以與任意型式的互斥鎖配合使用,相比前者使用時會有額外的開銷
多執行緒通訊同步原語
阻塞乙個或多個執行緒至收到來自其他執行緒的通知,超時或發生虛假喚醒
兩者具有同樣的成員函式,且在等待條件變數前都必須要獲得相應的鎖
二.成員函式notify_one():通知乙個等待執行緒
原型:void motify_one() noexcept;
成員函式notify_all():通知全部等待執行緒
原型:void motify_one() noexcept;
成員函式wait():阻塞當前執行緒至被喚醒
原型:templatevoid wait( lock & lock );
原型:templatevoid wait( lock & lock, predicate p );
三.成員函式wait_for():阻塞至被喚醒或超過指定時長
原型: templatecv_status wait_for( lock& lock, const chrono::duration& rtime );
原型:templatebool wait_for( lock& lock, const chrono::duration& rtime, predicate p );
成員函式wait_until():阻塞至被喚醒或到達指定時點
原型:templatecv_status wait_until( lock & lock, const chrono::time_point& atime);
原型:templatebool wait_until( lock& lock, const chrono::time_point& atime, predicate p );
四.#include #include #include #include std::mutex x;
std::condition_variable cond;
bool ready = false;
bool isready()
void run( int no )
int main()
// 離開作用域,自動解鎖;可將此復合語句塊實現為函式
// 基於區間的迴圈結構,對屬於threads陣列的所有元素t,執行迴圈體
for( auto & t: threads )
t.join();
return 0;
}原子型式
一.使用方法
使用atomic模板定義原子物件
使用預定義標準原子型式:atomic_bool、atomic_char、atomic_int、atomic_uint、atomic_long、atomic_wchar_t等等
意義:輕量級,支援單變數上的原子操作
二.三.#include #include #include int n = 0;
std::atomica( 0 );
void addatomically( int m )
void add( int m )
int main()
原子變數與原子操作
1.原子操作的速度要快於臨界區,event,互斥量,如果多個執行緒同時寫乙個變數時,最方便的就是原子操作。原子操作函式,解決多執行緒安全 2.原子變數也是為了解決執行緒衝突問題,如果兩個執行緒同時訪問同乙個變數,乙個執行緒改變了這個變數,另乙個執行緒就會出現一些bug。3.release和debug...
原子變數的操作
原子操作,顧名思義,就是說像原子一樣不可再細分。乙個操作是原子操作,意思就是說這個操作是以原子的方式被執行,要一口氣執行完,執行過程不能夠被os的其他行為打斷,是乙個整體的過程,在其執行過程中,os的其它行為是插不進來的。原子整數操作的使用 常見的用途是計數器,因為計數器是乙個很簡單的操作,所以無需...
互斥鎖和條件變數
互斥瑣 定義 指代相互排斥,最基本的同步形式。用於保護臨界區,以保證任何時刻只有乙個執行緒或乙個程序在執行其中的 上鎖 pthread mutex lock 臨界區解鎖 pthread mutex unlock 條件變數 定義 用於等待訊號,同步的另一種手段。每乙個條件變數總有乙個互斥瑣與之關聯。等...