C 併發程式設計實戰 閱讀筆記

2022-08-05 07:09:13 字數 800 閱讀 3652

1. 當把函式物件傳入到執行緒建構函式中時,需要避免「最令人頭痛的語法解析」。如果傳遞了乙個臨時變數,而不是乙個命名的變數;c++編譯器會將其解析為函式宣告,而不是型別物件的定義。

例如:

class

background_task

};background_task f;

std::thread my_thread(f);

//正確

std::thread my_thread(background_task());

//???my_thread變成了乙個函式

???這裡相當與宣告了乙個名為my_thread的函式,這個函式帶有乙個引數(函式指標指向沒有參

數並返回background_task物件的函式),返回乙個 std::thread 物件的函式,而非啟動了乙個

執行緒。使用在前面命名函式物件的方式,或使用多組括號①,或使用新統一的初始化語法②,可以避

免這個問題。

如下所示:

std::thread my_thread((background_task())); //

1std::thread my_thread; //

2

使用lambda表示式也能避免這個問題。

std::thread my_thread();

2. 精心組織**來保護共享資料

切勿將受保護資料的指標或引用傳遞到互斥鎖作用域之外,無論

是函式返回值,還是儲存在外部可見記憶體,亦或是以引數的形式傳遞到使用者提供的函式中

去。

併發程式設計實戰筆記

template iterator 迭代器型別,t 內建資料型別 accumulate block iterator first,iterator last,t result templatet parallel accumulate iterator first,iterator last,t i...

《C程式設計閱讀筆記》

1 機器語言 計算機工作基於二進位制,計算機只能識別和接收0和1組合而成的指令。在計算機發展的初期一般計算機的指令長度為16,即16個二進位制組合成一條指令111110000111。這種計算機能夠直接識別和接收的二進位制 成為機器指令。機器指令的集合就是機器語言。2 符號語言 計算機不能直接識別符號...

Java併發 JAVA併發程式設計實戰 讀書筆記3

發布乙個物件的意思是使它能夠被當前範圍之外的 所使用。比如將乙個引用儲存到其他 可以訪問的地方,在乙個非私有的方法中返回這個引用。在很多情況下,我們需要確保物件及它們的內部狀態不被暴露。乙個物件在尚未準備好時就將它發布,稱作逸出。最常見的發布物件的方式就是將物件的引用儲存到公共靜態域中,任何類和執行...