中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

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

南开区| 开原市| 柳河县| 襄汾县| 盖州市| 四平市| 临沧市| 邹城市| 建德市| 西昌市| 东辽县| 阳新县| 台南县| 丹阳市| 丹凤县| 通辽市| 攀枝花市| 馆陶县| 宣恩县| 晋州市| 司法| 玉龙| 甘谷县| 双柏县| 湟源县| 望谟县| 梅州市| 沂水县| 白山市| 五家渠市| 石泉县| 德昌县| 嵊泗县| 扎鲁特旗| 墨江| 汝南县| 阳泉市| 桂平市| 巴彦县| 甘德县| 赣榆县|