亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

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

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

C++多線程庫函數并發控制策略

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

C++ 多線程庫提供了一些函數和類來實現并發控制策略,主要包括互斥鎖(mutex)、條件變量(condition variable)和原子操作(atomic operations)等

  1. 互斥鎖(mutex):互斥鎖是最基本的同步機制,用于保護共享資源免受多個線程的同時訪問。當一個線程獲得互斥鎖時,其他線程必須等待該線程釋放鎖后才能繼續訪問共享資源。C++ 標準庫中的 std::mutex 類提供了互斥鎖的實現。

示例代碼:

#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. 條件變量(condition variable):條件變量通常與互斥鎖一起使用,以實現線程間的同步和通信。當一個線程需要等待另一個線程完成某個操作時,可以使用條件變量。C++ 標準庫中的 std::condition_variable 類提供了條件變量的實現。

示例代碼:

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

std::mutex mtx;
std::condition_variable cv;
bool ready = false; // 共享狀態

void worker_thread() {
    std::unique_lock<std::mutex> lock(mtx);
    while (!ready) { // 如果共享狀態為 false,則等待
        cv.wait(lock);
    }
    std::cout << "Worker thread is ready."<< std::endl;
}

void main_thread() {
    std::this_thread::sleep_for(std::chrono::seconds(1)); // 模擬延遲
    {
        std::unique_lock<std::mutex> lock(mtx);
        ready = true; // 修改共享狀態
    }
    cv.notify_one(); // 喚醒等待的線程
}

int main() {
    std::thread worker(worker_thread);
    main_thread();
    worker.join();
    return 0;
}
  1. 原子操作(atomic operations):原子操作是一種不可分割的操作,它可以在沒有鎖的情況下實現線程安全。C++ 標準庫中的 std::atomic 類模板提供了原子操作的實現。原子操作通常用于實現無鎖數據結構和高性能的并發算法。

示例代碼:

#include<iostream>
#include<thread>
#include<atomic>

std::atomic<int> shared_data(0); // 原子整數類型的共享數據

void thread_function() {
    ++shared_data; // 原子操作,自增 1
}

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

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

    std::cout << "Shared data: "<< shared_data.load()<< std::endl;
    return 0;
}

這些并發控制策略可以根據具體的應用場景和需求進行組合使用,以實現高效、安全的多線程編程。

向AI問一下細節

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

c++
AI

安庆市| 全南县| 铜川市| 远安县| 当阳市| 吕梁市| 阿鲁科尔沁旗| 光泽县| 金秀| 珠海市| 兰坪| 林州市| 西藏| 罗源县| 盐边县| 宜兰县| 新野县| 易门县| 通道| 肥乡县| 庄河市| 潮安县| 遵义县| 卢龙县| 黑龙江省| 乐安县| 长海县| 彰武县| 铜川市| 班戈县| 淮阳县| 平遥县| 绥德县| 德庆县| 灯塔市| 华亭县| 九江县| 阳曲县| 洞口县| 灵石县| 新丰县|