c++ - C ++在两个分离的线程之间共享非阻塞队列和互斥锁
问题描述
我今天正在尝试在 C++ 中学习 std::thread 。我的目标是生成两个线程,一个是网络侦听器,另一个是网络发送器。侦听器将从目标服务器获取反馈消息,然后通过共享队列(非阻塞)向发送器发送命令。我对共享队列的正确方法有点困惑。
我有一个名为 Network 的类,其中包含上述所有内容,这是其中的一部分。
//part of my class
std::mutex mMessageMutex;
//message is class for messages to share
queue<message> mMessageQueue;
std::thread mTCPthread;
std::thread mUDPthread;
Network::threadTest(){
mTCPthread = std::thread(&Sender::tcpThread, this);
mUDPthread = std::thread(&Sender::udpThread, this);
mTCPthread.detach();
mUDPthread.detach();
}
Network::tcpThread(){
//wait for messages
while(1)
if(messageFromNetwork)
mMessageQueue.push(_message);
}
Network::udpThread(){
//do some work
while(1){
if(mMessageQueue.size > 0){
message = mMessageQueue.front();
mMessageQueue.pop();
//process message
}
}
}
然后我创建一个新的网络对象并在这个示例主函数中启动 threadTest。最后,我循环等待某种用户干预。
///////////////////
int main(void){
std::unique_ptr<Network> _network(new Network());
unique_ptr->threadTest();
while(1){
//wait on user input or stop signal
}
}
所以从我的阅读来看,我认为只要我不退出 main 或者如果我在另一个函数中这样做,只要我不让 _network 超出范围,那么 mMessageMutex 和 mMessageQueue 将可用于两个线程使用?
我还刚刚学会了如何使用 unique_ptr (对于老前辈来说,c++ 中的情况发生了变化!)。所以我希望当 _network 超出范围时,mTCPthread、mUDPthread 和 _network 都将被销毁而不是泄漏。
谢谢
解决方案
推荐阅读
- android - 自定义 Android 手机上接近传感器的阈值距离
- directory - 将通配符 * 附加到文件的变量名末尾
- reactjs - 使用 Apollo React 获取的数据
- python - 使用不同的 DataFrame 更改 pandas DataFrame 切片中的值
- python - Flask onButton 将字符串传递给函数
- python - 我无法使用 virtualenv 创建虚拟环境
- wordpress-gutenberg - Gutenberg - 从服务器端获取值
- python - Python VsCode:找不到 parser.pyx
- jquery - 复选框选中所有
- c# - C# mysql 数据库。如何快速将一个非常大的数据集传递给表?