程式設計基礎 C 多執行緒入門6 事件處理的需求

2021-10-06 15:19:21 字數 1366 閱讀 7994

原始c++標準僅支援單執行緒程式設計。新的c++標準(稱為c++11或c++0x)於2023年發布。在c++11中,引入了新的執行緒庫。因此執行本文程式需要c++至少符合c++11標準。

在本文中,我們將討論多執行緒中事件處理的需求。有時,執行緒需要等待事件發生,例如條件變為真或任務由另乙個執行緒完成。假設我們正在構建乙個基於網路的應用程式。該應用程式執行以下任務,

如我們所見,任務1不依賴於任何其他任務,但是任務3依賴於任務2。因此,這意味著任務1和任務2可以由不同的執行緒並行執行以提高應用程式的效能。因此,讓我們將其分解為乙個多執行緒應用程式,現在,它包括兩個執行緒。

執行緒1的職責是:

執行緒2的職責是

如上圖所示,執行緒1執行一些操作,然後等待事件/條件發生。這裡的事件或條件是資料是否成功載入。執行緒1收到該事件後,便會對資料執行一些處理。當執行緒1忙於執行「握手機制」時,執行緒2並行載入資料。當執行緒2成功地從xml載入資料時,它隨後通過發訊號通知該事件來通知執行緒1。現在,當發出事件或條件訊號時,執行緒1將繼續處理資料。

使它成為多執行緒有什麼好處?當執行緒1忙於某種握手機制時,執行緒2將從xml並行載入資料。因此,它將提高應用程式的效能,現在,如何實現這一目標兩個選項。

選項1

void loaddata()

void maintask()

// release the lock

// 釋放鎖

m_mutex.unlock();

// doc processing on loaded data

// 載入資料的文件處理

std::cout << "do processing on loaded data" << std::endl;

}};int main()

輸出為:

do some handshaking

loading data from xml

do processing on loaded data

這種方式具有以下缺點:

執行緒將繼續獲取該鎖並釋放它只是為了檢查該值,因此它將消耗cpu週期,並使執行緒1變慢,因為它需要獲取相同的鎖來更新bool標誌。因此,顯然,我們需要一種更好的機制來實現這一目標,例如,如果某種程度上線程1可以通過等待某個事件被發出訊號而阻塞,而另乙個執行緒可以通過該訊號發出該事件並使執行緒1繼續執行,則該機制就可以實現。這樣可以節省許多cpu週期並提供更好的效能。但是問題是如何實現這一目標?我們將在選項2中看到答案。

選項2

C 多執行緒程式設計入門

handle createthread in sec attrs securityattributes,in ulong stacksize,initial stack size in sec thread start startfunction,thread function in pvoid t...

C 多執行緒處理基礎

cpu 處理器 或者核心 核心是實際執行程式的硬體單元。程序是某個程式當前正在執行的例項 作業系統的一項基本功能就是管理程序。每個程序都包含乙個或多個執行緒。程式中可以使用system.diagnostics命名空間的process類的例項來訪問程序。在語句和表示式的級別上,c 本質上就是在描述控制...

C 多執行緒程式設計基礎

使用執行緒有幾個原因。假設從應用程式中進行網路呼叫需要一定的時間。使用者不希望分割使用者界,並且讓使用者一直等待直到從伺服器返回乙個響應為止。使用者可以同時執行其他一些操作,或者甚至取消傳送給伺服器的請求。這些都可以使用執行緒來實現。對於所有需要等待的操作,例如,因為檔案 資料庫或網路訪問都需要一定...