我想写一个程序,一个模块是:
我有两个进程,进程A负责使用recvfrom()
或recv
接收数据包
另一个过程B继续其他一些事情。
每当进程A收到一个数据包时,它应该立即从数据包中提取一些信息并告诉信息进行处理B.并且B需要立即停止它正在做的事情并读取信息。
这就像一个tcp堆栈,让我说,进程A负责接收数据包或ack数据包,进程B负责发送数据包。当进程A收到数据包时,进程B应读取数据包,更新下一个传出包的seq号和ack_seq号。
无论如何,我的想法是进程A和B应该共享一个结构变量,并且varialbe上有一个锁。 B继续读取变量,当A收到数据包时,它锁定变量,因此B被阻塞。 A修改变量后,A解锁它,B得到读取变量,然后继续做自己的工作。伪代码就像
struct SHARE shared_variable;
pid=fork();
if(pid==0) { // process B
while(1){
lock(shared_variable);
k=read(shared_variable);
unlock(shared_variable);
do_something(k);
}
}
if(pid>0){ // process A
while(1){
recv();
lock(shared_variable);
modify(shared_variable);
unlock(shared_variable);
}
}
我不熟悉进程间通信和网络编程
我的问题是:
1是我伪代码的结构好吗?有更好的解决方案吗?
2我应该为共享变量使用什么样的IPC样式
3我只知道一些理论,有没有具体的样本源代码?
thanks!