基于两个程序之间的事件触发器访问数据(内存)

时间:2014-02-28 04:06:50

标签: c++ networking memory buffer

这个问题对某些人来说可能是非常重要的,但如果有人能在这里表达我的疑虑,那就太棒了。我有两个软件程序(两个进程),它们通过网络通过标准TCP连接进行通信。例如,程序A的作用类似于服务器不断等待来自程序B的指令和数据。一旦程序A接收到数据,它立即将数据存储在向量数组中,并执行使用数组中的数据并清除它的函数在末尾。例如,在程序A中:

std::vector<int> m_dataArray;

Run()
{
    m_received = false;
    while(1)
    {
        if(m_received)
        {
            Execution();
        }
    }
}

Listener(int data)
{
    m_dataArray.push_back(data);    
    m_received = true;
}

Execution()
{
    m_received = false;

    // read from the data array and do something

    m_dataArray.clear();
}

我的问题是,如果程序B继续向程序A发送数据,程序A是否会将所有这些传入数据放入缓冲区,直到程序A完成当前执行,然后再将新数据集放入数组中?或者同时访问内存有问题。 (例如,即使程序A仍处于执行阶段,m_received标志是否会一直闪烁?)

如果这是一个问题,实现这样的事情以避免任何问题的最佳方法是什么?我想过让程序A在发送下一个数据之前向程序B发出“已完成”的信号。

1 个答案:

答案 0 :(得分:0)

以下是一个使运行和执行与Listener执行时可能没有任何问题的示例

std::vector<int> m_dataArray;

Run()
{
    while(1)
    {
        if(m_dataArrayBuffer.length > 0)
        {
            // we take the data out and use it in execute
            // these operations are independent of listener adding additional data
            int data = m_dataArrayBuffer.pop();
            Execution(data);
        }
    }
}

Listener(int data)
{
    m_dataArrayBuffer.push_back(data);    
}

Execution(int data)
{
    // user the data and do something
}