プログラムを書きたいのですが、1つのモジュールは次のとおりです。
私には2つのプロセスがあります。プロセスAは、recvfrom()
またはrecv
を使用してパケットを受信し、別のプロセスBは他のことを続けます。
プロセス A がパケットを受信するたびに、すぐにパケットから何らかの情報を抽出し、その情報をプロセス B に伝える必要があります。また、B は実行していることをすぐに停止して情報を読み取る必要があります。
これは tcp スタックのようなものです。たとえば、プロセス A はデータ パケットまたは ack パケットの受信を担当し、プロセス B はパケットの送信を担当します。プロセス A がデータ パケットを受信すると、プロセス B はデータ パケットを読み取り、次の送信パケットの seq 番号と ack_seq 番号を更新する必要があります。
とにかく、私の考えでは、プロセス A と B は構造変数を共有する必要があり、変数にはロックがあります。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!