我想写一个程序,一个模块是:
我有两个进程,进程 A 负责使用recvfrom()
or接收数据包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!