用C++写一个单例类MsgSingleton,这个类有一个消息队列,消息队列存放的int数据,存和取消息队列中的数据都需要用锁。其它文件可以调用这个类。
时间: 2024-05-05 20:22:43 浏览: 80
以下是一个可能的实现:
```cpp
#include <queue>
#include <mutex>
class MsgSingleton {
public:
static MsgSingleton& getInstance() {
static MsgSingleton instance;
return instance;
}
void pushMsg(int msg) {
std::unique_lock<std::mutex> lock(m_mutex);
m_msgQueue.push(msg);
}
bool popMsg(int& msg) {
std::unique_lock<std::mutex> lock(m_mutex);
if (m_msgQueue.empty()) {
return false;
}
msg = m_msgQueue.front();
m_msgQueue.pop();
return true;
}
private:
MsgSingleton() {}
std::queue<int> m_msgQueue;
std::mutex m_mutex;
};
```
这是一个使用 Meyer's Singleton 模式实现的单例类,使用了 C++11 中的 std::mutex 和 std::unique_lock 来实现线程安全的消息队列操作。pushMsg() 和 popMsg() 函数分别用于向队列中添加和取出数据,并且都使用了 std::unique_lock 来获取锁。如果队列为空,则 popMsg() 函数返回 false,否则返回 true 并将队首元素存入传入的参数中。其他文件可以通过调用 MsgSingleton::getInstance() 函数来获取单例对象并使用其成员函数。
阅读全文