在“队列”中设置限制

Set the limit in Queue

本文关键字:设置 队列      更新时间:2023-10-16

我想对我的队列设置一个限制。您可以在下面找到Queue类的实现。

所以,简而言之,我想在一个线程中写入Queue,直到达到极限,然后等待可用空间。第二个线程读取Queue并对它接收到的数据执行一些操作。

int main()
{
    //loop that adds new elements to the Queue. 
     thread one(buildQueue, input, Queue); 
    loop{
        obj = Queue.pop()
        func(obj) //do some math
    }

}

因此,问题是队列一直构建到最后,但例如,我只想设置10个元素。程序应该这样工作:

  1. 检查队列中是否有可用空间。
    1. 如果没有空间,请等待
    2. 在队列中写入,直到达到极限

类队列

template <typename T> class Queue{
private:
    const unsigned int MAX = 5;
    std::deque<T>           newQueue;
    std::mutex              d_mutex;
    std::condition_variable d_condition;
public:
    void push(T const& value)
    {
        {
            std::unique_lock<std::mutex> lock(this->d_mutex);
            newQueue.push_front(value);
        }
        this->d_condition.notify_one();
    }
    T pop()
    {
        std::unique_lock<std::mutex> lock(this->d_mutex);
        this->d_condition.wait(lock, [=]{ return !this->newQueue.empty(); });
        T rc(std::move(this->newQueue.back()));
        this->newQueue.pop_back();
        return rc;
    }
    unsigned int size()
    {
        return newQueue.size();
    }
    unsigned int maxQueueSize()
    {
        return this->MAX;
    }
};

我对线程程序很陌生,所以我可能会误解这个概念。这就是为什么不同的提示会受到高度赞赏。

您应该研究MSDN网站中的Queue类。它提供了Queue中包含的广泛的信息循环方法。然而,要具体回答您的问题,要设置具有特定容量的队列,它将是以下内容:

Queue(int capacity)

其中它是类型CCD_ 1 capacity是队列中元素的初始数量。然后,您的队列将被填满,直到达到极限。问题是,队列一旦填满就不会"停止"。它将开始分配更多的内存,因为这是它的本质,所以在你的线程化(或听起来是多线程的)中,你必须确保根据时间来处理队列内存的realoc释放。您应该能够确定用所需容量填充队列并读取队列所需的毫秒数,同时清除队列。同样,您可以将队列内容复制到1D数组中,并使用MyQueue->Clear()执行完整的队列清除,而不必逐个读取队列元素1(如果时间和代码复杂性是个问题)。