如何使用 C 函數實作多執行緒程式設計?建立一個帶有可呼叫物件的 std::thread 物件。呼叫 join() 函數等待執行緒完成。使用互斥量、條件變數和信號量等執行緒同步技術來確保共享資源的存取安全。在實戰案例中,您可以建立執行緒來並行處理文件,提高程式效能。
#簡介
多執行緒程式設計涉及建立多個同時運行的任務或線程。在 C 中,可以透過使用線程函數來實現多線程。本文將介紹如何使用 C 函數建立和管理線程。
建立和啟動線程
要建立線程,可以使用 std::thread
類別。該類別採用一個可調用物件作為參數,該物件定義了執行緒要執行的任務。以下是建立執行緒的範例程式碼:
#include <thread> void thread_function() { // 线程要执行的任务 } int main() { std::thread t(thread_function); t.join(); // 等待线程完成 return 0; }
當 std::thread
物件被建立時,它將呼叫指定的函數,並建立一個新執行緒來執行該函數。 join()
函數會等待執行緒完成,確保在主執行緒退出之前所有執行緒都已完成。
執行緒同步
為了確保共享資源在多執行緒環境中的安全訪問,需要使用執行緒同步技術。 C 提供了幾種同步原語,包括:
實戰案例
假設我們要建立一個並行處理檔案的程式。我們可以使用多線程來同時讀取和處理文件的不同部分。以下是程式範例:
#include <thread> #include <vector> #include <iostream> #include <fstream> using namespace std; vector<string> lines; void read_file(const string& filename) { ifstream file(filename); string line; while (getline(file, line)) { lines.push_back(line); } } void process_lines() { for (auto& line : lines) { // 处理行 cout << line << endl; } } int main() { // 创建读取和处理文件的线程 thread t1(read_file, "file1.txt"); thread t2(process_lines); // 等待线程完成 t1.join(); t2.join(); return 0; }
在此範例中,read_file()
函數用於讀取文件,而 process_lines()
函數用於處理每一行。多線程允許檔案的讀取和處理同時進行,從而提高了程式的效能。
以上是如何使用 C++ 函數實作多執行緒程式設計?的詳細內容。更多資訊請關注PHP中文網其他相關文章!