C++ - Simple SharedQueue 是必需的

C++ - Simple SharedQueue is mutex necessary?

本文关键字:SharedQueue Simple C++      更新时间:2023-10-16

我创建了一个简单的"SharedQueue"类,它由2个线程访问 - 一个用于插入数据,另一个用于接收数据。在此示例中,它包含 int s,但它将被扩展为模板类,以便它可以保存所有内容。

internalQueue只是一个std::queue<int>qMtx是一个std::mutex

以下实施部分:

size_t SharedQueue::size() const
{
    return internalQueue.size();
}
bool SharedQueue::empty() const
{
    return internalQueue.empty();
}
int SharedQueue::front()
{
    int retVal;
    qMtx.lock();
    retVal = internalQueue.front();
    qMtx.unlock();
    return retVal;
}
void SharedQueue::push(const int& val)
{
    qMtx.lock();
    internalQueue.push(val);
    qMtx.unlock();
}
void SharedQueue::push(int&& val)
{
    qMtx.lock();
    internalQueue.push(val);
    qMtx.unlock();
}
void SharedQueue::pop()
{
    qMtx.lock();
    internalQueue.pop();
    qMtx.unlock();
}

我的问题是:
调用 size()empty() 等方法时是否需要锁定互斥锁?

试图找到任何多线程队列的示例,但它没有回答我的问题。

您还必须保护这些功能。你不知道 size() 或 empty() 将要做什么;不能保证这些功能的原子性。

实现可以自由选择任何常量时间解决方案来确定 size() 和 empty(),但这并不意味着必须在某个地方"可能"具有半原子行为的计数器。