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

溫馨提示×

在多線程環境中如何安全地使用priorityqueue

小樊
86
2024-09-03 01:32:13
欄目: 編程語言

在多線程環境中,為了安全地使用 priority_queue,您需要確保在對 priority_queue 進行訪問和修改時使用同步機制

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

class SafePriorityQueue {
public:
    void push(int value) {
        std::unique_lock<std::mutex> lock(mtx);
        pq.push(value);
    }

    bool pop(int& value) {
        std::unique_lock<std::mutex> lock(mtx);
        if (pq.empty()) {
            return false;
        }
        value = pq.top();
        pq.pop();
        return true;
    }

private:
    std::priority_queue<int> pq;
    std::mutex mtx;
};

void worker(SafePriorityQueue& spq, int start, int end) {
    for (int i = start; i <= end; ++i) {
        spq.push(i);
    }
}

int main() {
    SafePriorityQueue spq;

    // 創建并啟動多個線程向優先隊列添加元素
    std::vector<std::thread> threads;
    threads.emplace_back(worker, std::ref(spq), 1, 100);
    threads.emplace_back(worker, std::ref(spq), 101, 200);
    threads.emplace_back(worker, std::ref(spq), 201, 300);

    // 等待所有線程完成
    for (auto& t : threads) {
        t.join();
    }

    // 從優先隊列中獲取并打印元素
    int value;
    while (spq.pop(value)) {
        std::cout<< value << " ";
    }
    std::cout<< std::endl;

    return 0;
}

這個示例中,我們創建了一個名為 SafePriorityQueue 的類,它包裝了一個 std::priority_queue 并提供了用于操作優先隊列的線程安全方法。push()pop() 方法使用 std::mutex 來確保在多線程環境中對優先隊列的訪問是安全的。

main() 函數中,我們創建了三個線程,每個線程將一系列整數添加到 SafePriorityQueue 中。然后,我們等待所有線程完成,并從優先隊列中獲取并打印元素。

0
承德市| 镇沅| 铜鼓县| 徐闻县| 丰镇市| 水城县| 格尔木市| 长治市| 大宁县| 凤山市| 紫阳县| 兰州市| 成都市| 日照市| 台东市| 永嘉县| 金昌市| 远安县| 横山县| 安阳市| 清涧县| 齐齐哈尔市| 旬阳县| 扶余县| 教育| 汉源县| 油尖旺区| 连云港市| 威海市| 偃师市| 湘潭市| 安阳县| 江永县| 南阳市| 缙云县| 长乐市| 陵川县| 通渭县| 平邑县| 平顺县| 昌平区|