原子操作,基本都包含我們三個方面所關心的語義:
– 操作本身是不可分割的(atomicity),
– 乙個執行緒對某個資料的操作何時對另外乙個執行緒可見(visibility),
– 執行的順序是否可以被重排(ordering)。
#include
#include
#include
using
namespace
std;
using
namespace boost;
int main()
使用mutex,潛在風險是程式中途奔潰,常常使用lock_guard輔助使用mutex,保證mutex 自動析構
mutex未能及時unlock,lock() try_lock_timed() try_lock_until() 是阻塞的,try_lock() 非阻塞,返回bool型別
#define boost_thread_version 4
#include
#include
#include
#include
#include
#include
using
namespace
std;
using
namespace boost;
//account繼承lockable_adapter,所以account有了mutex的介面,可以像互斥量一樣使用
class account : public lockable_adapter;
public:
account() {}
~account() {}
int sum()const
void withdraw(int x)
void deposit(int x)
};int main()
//g 大括號必須加,出了作用於 互斥鎖自動解析,否則b ,沒法 鎖定
}::system("pause");
return
0;}
#define boost_thread_version 4
#include
#include
#include
#include
#include
#include
using
namespace
std;
using
namespace boost;
int main()
; 編譯期 常量標誌
//adopt_lock : is_locked = true 不執行鎖定操作
lock(m1, m2);//最多5個,鎖定2個mutex
//lock() 區別於mutex.lock() 可以一次鎖定最多5個mutex
}//unique_lock 自動解鎖
//unique_lock 自動解鎖
::system("pause");
return
0;}
#define boost_thread_version 4
#include
#include
#include
#include
#include
#include
using
namespace
std;
using
namespace boost;
void dummy(int n)
int main()
//assert(t1.get_id() == t2.get_id());
//cout << thread::hardware_concurrency() << endl; //cpu 核心數量
//cout << thread::physical_concurrency() << endl; //真實的物理cpu核心數量
4個自由函式,無須thread物件即可操作當前執行緒,
位於子命名空間boost::this_thread
//boost::this_thread::sleep_for(boost::chrono::milliseconds(200));
if (t1.joinable())
t1.join();
if (t2.joinable())
t2.join();
//bool joinable() 判斷thread物件是否標識了乙個可執行的執行緒體,即可呼叫的函式
//join()阻塞等待執行緒結束,誰來等!!!主線程
//所以t1 t2依舊如此雜亂
//detach() 分離執行緒物件和執行緒體,此後thread物件不代表任何執行緒體,joinable() == false
//detach分離,不影響執行緒執行體繼續執行,直到函式結束或者主線程結束
::system("pause");
return
0;}
看看這凌亂的結果
dummy for x 10
dummy for x 20
dummy for x 10
dummy for x 20dummy for x 10
dummy for x dummy for x 2010
dummy for x dummy for x 2010
dummy for x dummy for x 2010
dummy for x dummy for x 2010
dummy for x dummy for x 2010
dummy for x dummy for x 1020
dummy for x 10dummy for x 20
dummy for x 10dummy for x 20
dummy for x 20
dummy for x 20
dummy for x 20
dummy for x 20
dummy for x 20
dummy for x 20
dummy for x 20
dummy for x 20
dummy for x 20
dummy for x 20
dummy for x 20
分離執行緒
#define boost_thread_version 4
#include
#include
#include
#include
#include
#include
using
namespace
std;
using
namespace boost;
void dummy(int n)
int main()
boost多執行緒程式設計 一
一.thread執行緒的建立 1.執行緒就是在程序空間中執行的乙個函式 2.執行緒建立時需要傳遞給thread物件乙個函式物件或函式 3.傳遞的函式有引數時,可以直接傳遞給thread物件,並在呼叫時候發生拷貝。二.下面我們來看個簡單的例子 include include include void ...
boost 多執行緒程式設計 二
一.互斥量的介紹 1.互斥量主要是用於執行緒間的同步,在多執行緒中主要是防止多個執行緒同時操作共享資源。2.互斥的基本原則是,一旦某乙個執行緒擁有互斥變數的所有權,操作共享的資源時,那麼其他的執行緒就處於等待中,等待這個互斥量的所有權,一旦擁有所有權的執行緒釋放互斥變數時,其他的執行緒才能取得互斥變...
多執行緒併發程式設計
docker 可謂是開啟了容器化技術的新時代,現在無論大中小公司基本上都對容器化技術有不同程度的嘗試,或是已經進行了大量容器化的改造。伴隨著 kubernetes 和 cloud native 等技術和理念的普及,也大大增加了業務容器化需求。而這一切的推進,不可避免的技術之一便是構建容器映象。在本場...