91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

從C++ Cookbook學習多線程編程

c++
小樊
84
2024-08-29 19:02:59
欄目: 編程語言

《C++ Cookbook》是一本關于C++編程的實用教程,其中包含了許多關于多線程編程的示例和解釋

  1. 包含頭文件:在使用C++的線程庫之前,需要包含<thread>頭文件。
#include<iostream>
#include<thread>
  1. 創建線程:使用std::thread類創建一個新線程。將要執行的函數作為參數傳遞給std::thread對象。
void myFunction() {
    // 在這里執行你的任務
}

int main() {
    std::thread t(myFunction); // 創建一個新線程并執行myFunction
    t.join(); // 等待線程完成
    return 0;
}
  1. 傳遞參數給線程函數:如果你的函數需要參數,可以在創建std::thread對象時傳遞這些參數。
void myFunctionWithArgs(int a, int b) {
    // 在這里執行你的任務
}

int main() {
    std::thread t(myFunctionWithArgs, 10, 20); // 創建一個新線程并執行myFunctionWithArgs
    t.join(); // 等待線程完成
    return 0;
}
  1. 線程同步:當多個線程需要訪問共享資源時,需要使用互斥鎖(std::mutex)來確保同一時間只有一個線程可以訪問資源。
#include <mutex>

std::mutex mtx; // 全局互斥鎖

void threadFunction() {
    mtx.lock(); // 加鎖
    // 訪問共享資源
    mtx.unlock(); // 解鎖
}

int main() {
    std::thread t1(threadFunction);
    std::thread t2(threadFunction);
    t1.join();
    t2.join();
    return 0;
}
  1. 使用std::unique_lock簡化互斥鎖的使用:std::unique_lock可以自動管理互斥鎖的加鎖和解鎖操作,從而簡化代碼。
#include <mutex>

std::mutex mtx; // 全局互斥鎖

void threadFunction() {
    std::unique_lock<std::mutex> lock(mtx); // 自動加鎖
    // 訪問共享資源
    // 自動解鎖
}

int main() {
    std::thread t1(threadFunction);
    std::thread t2(threadFunction);
    t1.join();
    t2.join();
    return 0;
}
  1. 使用條件變量(std::condition_variable)實現線程間的同步:條件變量允許一個或多個線程等待,直到另一個線程通知它們。
#include<condition_variable>

std::mutex mtx;
std::condition_variable cv;
bool ready = false;

void print_id() {
    std::unique_lock<std::mutex> lck(mtx);
    while (!ready) { // 如果ready為false,則等待
        cv.wait(lck); // 當前線程被阻塞,等待條件變量被通知
    }
    // 打印線程ID
    std::cout << "thread "<< std::this_thread::get_id() << '\n';
}

void go() {
    std::unique_lock<std::mutex> lck(mtx);
    ready = true; // 修改共享變量
    cv.notify_all(); // 通知所有等待的線程
}

int main() {
    std::thread threads[10];
    for (auto& th : threads) {
        th = std::thread(print_id);
    }

    std::cout << "10 threads ready to race...\n";
    go(); // 啟動競爭

    for (auto& th : threads) {
        th.join();
    }

    return 0;
}

這些示例僅涵蓋了C++多線程編程的基本概念。在實際應用中,你可能還需要處理更復雜的場景,如線程池、原子操作、鎖無關編程等。建議你深入研究C++標準庫中的線程支持,以便更好地理解和應用多線程編程。

0
鄂托克旗| 来宾市| 拉萨市| 威海市| 扶沟县| 舟山市| 历史| 鹤山市| 和龙市| 东明县| 朔州市| 乡城县| 宁晋县| 平顶山市| 镇原县| 太仆寺旗| 阳朔县| 冕宁县| 抚宁县| 双城市| 资溪县| 兴业县| 芦山县| 定日县| 富蕴县| 高平市| 军事| 雷波县| 江门市| 南昌市| 苏尼特右旗| 临海市| 莫力| 湛江市| 松阳县| 珲春市| 浦东新区| 任丘市| 珠海市| 出国| 周口市|