併發程式設計 第2章

2021-08-16 04:28:52 字數 1341 閱讀 4292

有件事需要注意,當把函式物件傳入到執行緒建構函式中時,需要避免

「最令人頭痛的語法解析

」(c++』s most vexing parse

, 中文簡介

)。如果你傳遞了乙個臨時變數,而不是乙個命名的變數;

c++編譯器會將其解析為函式宣告,而不是型別物件的定義。

例如:

std::thread my_thread(background_task());
這裡相當與宣告了乙個名為

my_thread

的函式,這個函式帶有乙個引數

(函式指標指向沒有引數並返回

background_task

物件的函式

),返回乙個 

std::thread 

物件的函式,而非啟動了乙個執行緒。

呼叫join()

的行為,還清理了執行緒相關的儲存部分,這樣 

std::thread 

物件將不再與已經完成的執行緒有任何關聯。這意味著,只能對乙個執行緒使用一次

join()

;一旦已經使用過

join()

, std::thread 

物件就不能再次加入了,當對其使用

joinable()

時,將返回否(

false

) 。為了從

std::thread

物件中分離執行緒

(前提是有可進行分離的執行緒

):不能對沒有執行執行緒的

std::thread

物件使用

detach(),

也是join()

的使用條件,並且要用同樣的方式進行檢查

——當

std::thread

物件使用

t.joinable()

返回的是

true

,就可以使用

t.detach()

std::thread t(do_background_work);

t.detach();

assert(!t.joinable());

使用多執行緒方式開啟檔案:

void edit_document(std::string const& filename)

else

}}

如果使用者選擇開啟乙個新文件,為了讓迅速開啟文件,需要啟動乙個新執行緒去開啟新文件

①,並分離執行緒

②。與當前執行緒做出的操作一樣,新執行緒只不過是開啟另乙個檔案而已。所以,

edit_document

函式可以復用,通過傳參的形式開啟新的檔案。

併發程式設計實戰筆記 第2章

1 無狀態的物件一定是執行緒安全的。2 不恰當的執行時序,出現不正確的結果,定義為競態條件。3 單狀態變數,使用原子型別 4 多狀態變數互動,使用synchronzied,包括2部分,1 要鎖定的物件 2 要保護的 塊。被保護的 塊,操作可看成乙個事務。5 內建鎖是可重入的,也就是自己去獲取自己已經...

第 2 章 T SQL 程式設計

一 批處理 go 1,go是批處理的標誌 2.作用 可以使不在同一批處理語句中的sql語句相互不受影響 3.使用 把相互聯絡的放在同一批次,沒聯絡的放在不同批次 二變數 區域性變數,全域性變數 區域性變數和全域性變數的區別 區域性變數 定義它的區域性範圍內有效 1.必須以標記 作為字首,如 rew ...

第16章 網路程式設計 2

16.3 python中的網路程式設計 16.3.1 socket 模組函式 使用socket.socket 函式來建立套接字。socket socket family,socket type,protocol 0 import socket tcpsock socket.socket socket...