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

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C++線程同步庫詳解

發布時間:2024-09-10 12:56:12 來源:億速云 閱讀:85 作者:小樊 欄目:編程語言

C++ 標準庫中的線程同步庫提供了一組原語,用于在多線程環境中實現數據共享和保護

  1. 互斥鎖(std::mutex)

std::mutex 是 C++ 中最基本的同步原語之一。它提供了一種方法來保護共享數據,以防止多個線程同時訪問。當一個線程鎖定互斥鎖時,其他試圖鎖定該互斥鎖的線程將被阻塞,直到鎖被解鎖。

示例:

#include<iostream>
#include<thread>
#include <mutex>

std::mutex mtx; // 全局互斥鎖
int shared_data = 0; // 共享數據

void thread_function() {
    std::unique_lock<std::mutex> lock(mtx); // 鎖定互斥鎖
    ++shared_data; // 修改共享數據
    lock.unlock(); // 解鎖互斥鎖
}

int main() {
    std::thread t1(thread_function);
    std::thread t2(thread_function);

    t1.join();
    t2.join();

    std::cout << "Shared data: "<< shared_data<< std::endl;
    return 0;
}
  1. 遞歸鎖(std::recursive_mutex)

std::recursive_mutex 類似于 std::mutex,但允許同一線程多次鎖定相同的互斥鎖。這在某些情況下可能很有用,例如在遞歸函數中保護共享數據。

  1. 時間點(std::chrono)

std::chrono 是 C++ 中處理時間的庫,它提供了高精度時間測量和時間點操作。這對于實現超時鎖定和定時任務非常有用。

  1. 條件變量(std::condition_variable)

std::condition_variable 是一個同步原語,允許一個或多個線程等待某個條件成立。當條件成立時,線程將被喚醒并繼續執行。條件變量通常與互斥鎖一起使用,以確保線程安全地訪問共享數據。

示例:

#include<iostream>
#include<thread>
#include <mutex>
#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); // 當前線程被阻塞,并釋放鎖
    }
    std::cout << "Thread "<< std::this_thread::get_id() << " is ready\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::this_thread::sleep_for(std::chrono::seconds(1));
    go(); // 修改 ready 并喚醒所有線程

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

    return 0;
}
  1. 讀寫鎖(std::shared_mutex)

std::shared_mutex 是一種特殊類型的互斥鎖,允許多個線程同時讀取共享數據,但只允許一個線程寫入。這在讀操作遠多于寫操作的場景中非常有用,因為它可以提高性能。

  1. 原子操作(std::atomic)

std::atomic 是一種特殊類型的變量,支持無鎖編程。原子操作是不可分割的,這意味著它們在多線程環境中是線程安全的。原子操作通常比使用互斥鎖更高效,但它們的功能有限,只支持基本的算術和邏輯操作。

  1. 線程局部存儲(Thread Local Storage, TLS)

C++11 引入了 thread_local 關鍵字,用于聲明線程局部變量。線程局部變量在每個線程中都有自己的實例,因此它們不需要同步。這可以用于存儲每個線程的狀態信息或緩存數據。

總之,C++ 標準庫提供了一組強大的同步原語,可以幫助開發人員在多線程環境中實現高效、安全的數據共享和保護。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

c++
AI

偃师市| 巩义市| 康保县| 永年县| 永德县| 明溪县| 烟台市| 杭州市| 彭山县| 平江县| 清原| 余姚市| 丽江市| 泰顺县| 万州区| 安平县| 汕尾市| 吴堡县| 玉田县| 偏关县| 阿拉善右旗| 新蔡县| 昭通市| 维西| 东乡族自治县| 五指山市| 石台县| 都昌县| 阳原县| 永年县| 双流县| 庆安县| 天祝| 长沙市| 顺昌县| 芮城县| 乐至县| 七台河市| 嘉峪关市| 正阳县| 临潭县|