【发布时间】:2014-02-28 04:06:49
【问题描述】:
这个问题对某些人来说可能非常基础,但如果有人能在这里消除我的疑问,那就太好了。我有两个软件程序(两个进程),它们通过网络通过标准 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 发出“完成”信号。
【问题讨论】:
-
在你的例子中是监听器,运行(接收器)和执行(工作者)并发(如在不同的线程/进程中)?
-
目前不是。在不同的线程上会更好吗?
-
很好,那么监听器必须被中断调用?如果是这样,它不知道运行的行为将是什么,但同时访问内存不会有问题..如果数据阵列的内容或接收到的操作之间发生变化,您将需要更好地控制运行和执行的行为跨度>
标签: c++ networking memory buffer