2014-02-28 18 views
1

这个问题对某些人来说可能是非常重要的,但如果有人能够在这里澄清我的疑惑,那将是非常好的。我有两个软件程序(两个进程),它们通过网络通过标准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.

+0

是监听器,运行(接收器)和执行(职工)并发(使运行和执行没有什么监听器可能会做的任何问题的例子如在不同的线程/进程中)还是不是? – clancer

+0

目前他们不是。不同的线程会不会更好? –

+0

其罚款,然后监听器必须被中断调用?如果是这样,它不知道运行的行为会是什么,但是同时访问内存不会有问题。如果数据阵列的内容或接收到的操作之间的变化需要更好地控制运行和执行的行为 – clancer

回答

0

这里,而他们正在执行

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 
} 
在你的榜样
相关问题