C ++在两个分离的线程之间共享非阻塞队列和互斥体

时间:2020-03-03 21:18:13

标签: c++ multithreading

我今天正在尝试学习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都将被破坏并且不会泄漏。

谢谢

0 个答案:

没有答案
相关问题