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

标签 c++ networking memory buffer

这个问题对某些人来说可能很基础,但如果有人能在这里消除我的疑虑就太好了。我有两个软件程序(两个进程),它们通过网络通过标准 TCP 连接进行通信。例如,程序A就像一个服务器,不断地等待程序B的指令和数据。一旦程序A收到数据,它立即将数据存储在一个 vector 数组中,并执行一个使用数组中的数据并清除它的函数在最后。例如,在程序 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还在Execution阶段,m_received flag会一直闪烁吗?)

如果这将成为一个问题,那么实现此类操作以避免任何问题的最佳方法是什么?我考虑让程序 A 在发送下一个数据之前向程序 B 发出“完成”信号。

最佳答案

这是一个让 Run 和 Execution 与 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
}

关于c++ - 两个程序之间基于事件触发器访问数据(内存),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22085971/

相关文章:

c - 编写 Linux 内存驱动程序以将小写字母转换为大写字母

xcode - Swift 字典内存消耗是天文数字

linux - 如何在多个Linux系统上同时运行同一个脚本

java循环内存和未完成任务的处理

c++ - 如何在 C++ 中求和/异或二进制字符串?

c++ - 如何为代理类实现相等运算符函数

c++ - 在自定义容器类上反转基于范围的 for 循环

c++ - 无法使用 C++ STL 映射获得正确答案

java - 客户端中的 DatagramSocket 未绑定(bind)到服务器中的端口。端口已被使用

python - 如何用Python将不同类型的数据一起打包成二进制数据