C++ - 简单 SharedQueue 是否需要互斥量?

标签 c++ queue mutex

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

internalQueue只是一个std::queue<int>qMtxstd::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(),但这并不意味着必须在某处“可能”具有半原子行为的计数器.

关于C++ - 简单 SharedQueue 是否需要互斥量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35646255/

相关文章:

c++ - 使用保存的客户端 ip 地址将数据包从服务器发送到特定客户端?

python - 在 Python 2.6 中使用 Queue 类

c++ - 为什么字符串 operator= 上的 double free?

C++ - 无法查看使用 WinObj 创建的互斥体

multithreading - QT 信号和插槽在单线程应用程序中的直接连接行为

linux - 信号量信号与互斥锁

c++ - 显式实例化可变参数构造函数 : template-id does not match any template declaration

c++ - 如果用户没有输入数据,我如何重新定位光标?

c++ - 类内的重载函数(Students())是输出输入的信息,但是没有作用

go - Go中的结构队列