c++ priority_queue在多线程环境中的使用

   2024-09-30 8130
核心提示:在C++中,std::priority_queue 不是线程安全的以下是一个使用 std::priority_queue 和 std::mutex 的示例:#includeiostream#inc

在C++中,std::priority_queue 不是线程安全的

以下是一个使用 std::priority_queuestd::mutex 的示例:

#include<iostream>#include<queue>#include<thread>#include <mutex>#include<vector>class ThreadSafePriorityQueue {public:    void push(int value) {        std::unique_lock<std::mutex> lock(mutex_);        queue_.push(value);    }    bool pop(int& value) {        std::unique_lock<std::mutex> lock(mutex_);        if (queue_.empty()) {            return false;        }        value = queue_.top();        queue_.pop();        return true;    }private:    std::priority_queue<int> queue_;    std::mutex mutex_;};void worker(ThreadSafePriorityQueue& queue, int start, int end) {    for (int i = start; i <= end; ++i) {        queue.push(i);    }}int main() {    ThreadSafePriorityQueue queue;    // 创建两个线程向队列添加元素    std::thread t1(worker, std::ref(queue), 1, 50);    std::thread t2(worker, std::ref(queue), 51, 100);    // 等待线程完成    t1.join();    t2.join();    // 从队列中获取并打印元素    int value;    while (queue.pop(value)) {        std::cout<< value << " ";    }    std::cout<< std::endl;    return 0;}

这个示例中,我们创建了一个名为 ThreadSafePriorityQueue 的类,它包装了 std::priority_queue 并提供了线程安全的 pushpop 方法。我们使用 std::mutex 来确保在同一时间只有一个线程可以访问队列。然后,我们创建了两个线程,分别向队列添加元素。最后,我们从队列中获取并打印元素。

 
举报打赏
 
更多>同类物流大全
推荐图文
推荐物流大全
点击排行

网站首页  |  关于我们  |  联系方式网站留言    |  赣ICP备2021007278号