C++ - Simple SharedQueue 是必需的
C++ - Simple SharedQueue is mutex necessary?
我创建了一个简单的"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(),但这并不意味着必须在某个地方"可能"具有半原子行为的计数器。
相关文章:
- 为什么别名声明不是有效的 init 语句(/simple-declaration)?
- SImple 代码在 DevC++ 中正确运行,但不能在 Visual Studio Code 中正常运行
- 使用 clang 和 G++ 编译此"simple"程序时出现链接错误
- "simple" C++ 解析器
- C++ - Simple SharedQueue 是必需的
- 我们是否需要为分配"placement new" "simple POD classes"显式调用析构函数?
- 以"simple c++"模式编译的程序在从QtCreator启动时不起作用
- C Simple RingBuffer语言 - 多线程 - 查找关键部分
- Simple auto_ptr
- Simple C++ getter/setters
- CMake "clang++ is not able compile a simple test program" (Fedora 20)
- 使用Rvalue引用和Simple Factory
- C++ - Noob - Simple Try/Catch
- C++ Simple cout ostream
- C++查找和替换字符串SIMPLE
- const integer simple
- 与C++ "simple"符号和符号的计算混淆
- 非类-name c++ 11类型-name是一个simple-template-id
- 使用Arduino Mega和Simple-H高压电机屏蔽控制直流电机
- 如何在没有邮件客户端的情况下使用Simple MAPI