傳遞引用變數到thread的方法

2021-07-09 04:44:38 字數 914 閱讀 1019

為了加速執行乙個c++程式,我們常常會用到multiple thread程式設計。比如下面是乙個例子:

#include

#include

void message(std::string& msg){

std::coutint main(){

std::string msg = "love the world!";

std:thread t1(message, msg);

t1.join(); //main wait for t1 to finish

std::cout另外,使用std::move(msg)也可以達到相同的效果,而且可以避免data race。 std::move()函式還可以將乙個執行緒轉移到另乙個執行緒,例如:

std::thread t1(fun1,std::move(v1),std::move(v2),...);

//wrong style: std::thread t2 = t1; which will not complie

std::thread t2 = std:::move(t1); //now t1 is empty 

t2.join();

另外,由於多執行緒的並行,我們可能會遇到多個執行緒訪問同一的資料的情況。比如,對一幅影象,同時進行人臉檢測和眼部檢測,都需要用到這一福影象。最直接的解決方案是為每乙個執行緒單獨建立乙份資料備份。當然,這帶來的是資料拷貝的損耗。所以,我們需要另闢蹊徑,尋找更好的方法。這時我們就需要用到mutex,如下:

#include

std::mutex mu;

share_print(std::string msg, int id){

std::lock_guardlocker(mu);

std::cout《當我們執行此函式時,不會出現兩個執行緒同時占用cout而出現資料競爭的情況。

從變數到指標到引用

1.再熟悉不過的說法,引用是變數的別名,操作引用跟操作變數的效果是一樣的 2.引用不是物件,因此,不會給引用分配記憶體空間 3.引數傳遞如果形參是引用,那麼此時引用的表現就像指標一樣,可以直接改變變數的值。這三個特點聽起來簡單,但是如果深入思考一下,就不由得疑惑 究竟是什麼造成了引用的這些特點,而引...

變數的引用 函式返回值傳遞引用

def test num print 在函式內部 d 對應的記憶體位址是 d num,id num 1 定義乙個字串變數 result hello print 函式要返回資料的記憶體位址是 d id result 2 將字串變數返回,返回的是資料的引用,而不是資料本身 return result 1...

測試 Golang 指標變數的引用傳遞

首先設計乙個資料結構 golang 結構體 list type list structnum 用來代表該結構的編號。list 用來表示該結構體型別的指標變數,指向下乙個節點。建立頭節點 head。建立其它節點 node1 node2 node3。node3 list node2 list node1...