小编Ciu*_*har的帖子

C++ 中的多线程生产者/消费者

我正在研究多线程并编写了一个基本的生产者/消费者。我对下面写的生产者/消费者有两个问题。1)即使将消费者睡眠时间设置为低于生产者睡眠时间,生产者似乎仍然执行得更快。2)在消费者中,我复制了生产者完成向队列添加但队列中仍有元素的情况下的代码。对于构建代码的更好方法有什么建议吗?

#include <iostream>
#include <queue>
#include <mutex>

class App {
private:
    std::queue<int> m_data;
    bool m_bFinished;
    std::mutex m_Mutex;
    int m_ConsumerSleep;
    int m_ProducerSleep;
    int m_QueueSize;
public:
    App(int &MaxQueue) :m_bFinished(false), m_ConsumerSleep(1), m_ProducerSleep(5), m_QueueSize(MaxQueue){}
    void Producer() {

        for (int i = 0; i < m_QueueSize; ++i) {
            std::lock_guard<std::mutex> guard(m_Mutex);
            m_data.push(i); 
            std::cout << "Producer Thread, queue size: " << m_data.size() << std::endl;
            std::this_thread::sleep_for(std::chrono::seconds(m_ProducerSleep));
        }
        m_bFinished = true;
    }

    void Consumer() {
        while (!m_bFinished) {
            if (m_data.size() > 0) {
                std::lock_guard<std::mutex> guard(m_Mutex);
                std::cout << "Consumer Thread, …
Run Code Online (Sandbox Code Playgroud)

multithreading producer-consumer c++11

4
推荐指数
2
解决办法
7204
查看次数

标签 统计

c++11 ×1

multithreading ×1

producer-consumer ×1