legongju.com
我们一直在努力
2025-01-11 22:59 | 星期六

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

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

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

#include
#include
#include
#include 
#include

class ThreadSafePriorityQueue {
public:
    void push(int value) {
        std::unique_lock lock(mutex_);
        queue_.push(value);
    }

    bool pop(int& value) {
        std::unique_lock lock(mutex_);
        if (queue_.empty()) {
            return false;
        }
        value = https://www.yisu.com/ask/queue_.top();> 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 来确保在同一时间只有一个线程可以访问队列。然后,我们创建了两个线程,分别向队列添加元素。最后,我们从队列中获取并打印元素。

未经允许不得转载 » 本文链接:https://www.legongju.com/article/101351.html

相关推荐

  • c++和c#有什么区别

    c++和c#有什么区别

    C++ 和 C# 是两种不同的编程语言,它们在许多方面都有所不同。以下是一些主要的区别: 语法:C++ 的语法比 C# 更复杂,因为它支持多种编程范式(如过程式、面向对...

  • c#数据类型有哪几种

    c#数据类型有哪几种

    C# 是一种面向对象的编程语言,它包含了多种数据类型。以下是 C# 中常见的数据类型: 整数类型: sbyte:8 位有符号整数,范围从 -128 到 127。
    byte:8 位...

  • c#如何定义一个字符串数组

    c#如何定义一个字符串数组

    在C#中,您可以使用以下方法之一定义一个字符串数组: 使用string[]关键字声明一个字符串数组,并分配给它一个新的数组实例。例如: string[] myStringArray = n...

  • c#如何获取串口列表

    c#如何获取串口列表

    在C#中,你可以使用System.IO.Ports.SerialPort类来获取计算机上的串口列表
    using System;
    using System.IO.Ports; class Program
    { static void...

  • c++ priority_queue与堆的关系

    c++ priority_queue与堆的关系

    C++中的priority_queue是一个容器适配器,它提供了对底层容器(默认为std::make_heap)的堆操作的封装。堆是一种特殊的二叉树数据结构,它可以用数组或向量来表示...

  • c++ priority_queue的性能优化方法

    c++ priority_queue的性能优化方法

    C++中的priority_queue是一个基于底层容器(默认为make_heap)实现的优先队列,其主要操作有插入、删除和访问最高优先级元素 选择合适的底层容器:priority_queu...

  • 如何优化C++ map拷贝的效率

    如何优化C++ map拷贝的效率

    在C++中,std::map是一种关联容器,它存储的元素是键值对,其中键不重复 使用std::move:
    如果你有一个临时的std::map对象,你可以使用std::move来移动它,...

  • C++ map拷贝的性能瓶颈在哪里

    C++ map拷贝的性能瓶颈在哪里

    C++中的std::map是一个关联容器,它存储了键值对并根据键进行排序 内存分配与释放:在拷贝过程中,需要为新的map分配足够的内存空间来存储原始map中的所有元素。...