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

溫馨提示×

C++循環隊列的多線程應用案例

c++
小樊
93
2024-07-14 10:24:27
欄目: 編程語言

循環隊列在多線程應用中經常用于實現生產者消費者模型。下面是一個簡單的C++多線程應用案例,利用循環隊列實現生產者消費者模型:

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

const int QUEUE_SIZE = 10;

std::queue<int> q;
std::mutex mtx;
std::condition_variable cv;

void producer() {
    for (int i = 0; i < 100; ++i) {
        std::unique_lock<std::mutex> lock(mtx);
        cv.wait(lock, []{ return q.size() < QUEUE_SIZE; });
        q.push(i);
        lock.unlock();
        cv.notify_all();
    }
}

void consumer() {
    for (int i = 0; i < 100; ++i) {
        std::unique_lock<std::mutex> lock(mtx);
        cv.wait(lock, []{ return !q.empty(); });
        int val = q.front();
        q.pop();
        std::cout << "Consumed: " << val << std::endl;
        lock.unlock();
        cv.notify_all();
    }
}

int main() {
    std::thread prod_thread(producer);
    std::thread cons_thread(consumer);

    prod_thread.join();
    cons_thread.join();

    return 0;
}

在這個案例中,我們使用一個循環隊列q來存儲生產者產生的數據,隊列的最大容量為QUEUE_SIZE。生產者線程不斷向隊列中添加數據,如果隊列已滿,則等待消費者線程消費數據;消費者線程不斷從隊列中取出數據進行消費,如果隊列為空,則等待生產者線程生產數據。

通過使用互斥量mtx和條件變量cv,我們實現了線程間的同步和通信。生產者線程在生產數據時會獲取互斥量,然后判斷隊列是否已滿,如果已滿則等待消費者線程通知;消費者線程在消費數據時會獲取互斥量,然后判斷隊列是否為空,如果為空則等待生產者線程通知。

0
黄平县| 深泽县| 青州市| 嘉义市| 醴陵市| 东安县| 五台县| 罗平县| 郓城县| 红桥区| 仁怀市| 本溪市| 九龙坡区| 平潭县| 绥江县| 资讯| 交城县| 灌南县| 方城县| 陆川县| 横峰县| 耒阳市| 诸暨市| 运城市| 集贤县| 尚义县| 综艺| 万州区| 双峰县| 松江区| 蛟河市| 台北市| 仙游县| 哈巴河县| 台东市| 蕲春县| 托里县| 吴川市| 高雄市| 保靖县| 丁青县|