boost併發程式設計 多執行緒

2021-08-21 08:24:14 字數 3523 閱讀 7734

原子操作,基本都包含我們三個方面所關心的語義:

– 操作本身是不可分割的(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 等技術和理念的普及,也大大增加了業務容器化需求。而這一切的推進,不可避免的技術之一便是構建容器映象。在本場...