3

2つのプロセスを同期する方法に少し問題があります。最初のプロセスは共有メモリを作成し、次に2番目のプロセスが共有メモリをいっぱいにして最初のプロセスに信号を戻すのを待つ必要があります。最初のプロセスを待機させる方法がわかりません。

これが私のプロセスがどのように見えるかの擬似コードです:

プロセス1:

create shared memory
create a semaphore
wait for the second process /* this part i dont know how to write */
output the shared memory

プロセス2:

get shared memory id
get the semaphore id
wait();
fill the shared memory 
signalize();
4

2 に答える 2

3

あなたは今のところ正しいです。

あなたがあなたの質問で述べたように、あなたはあなたの質問への答えであるセマフォを使用しています。

posixセマフォAPIには、セマフォカウントの値がゼロになるまで待機するsem_wait()があります。これは、他のプロセスからsem_postを使用してインクリメントされると、待機が終了します。

この場合、同期には2つのセマフォを使用する必要があります。

プロセス1(リーダー)
sem_wait(sem1);
.....。

.......
sem_post(sem2);

プロセス2(ライター)
sem_wait(sem2);
.......
.......
sem_post(sem1);

このようにして、共有メモリで同期を実現できます。

于 2012-06-04T11:56:16.763 に答える
0

これはヒントであり、完全な答えではありません。条件変数を使用します。それがどのように機能するかを説明しているhttps://computing.llnl.gov/tutorials/pthreads/#ConditionVariablesを参照してください。そこから解決策を見つけることができます。

于 2012-05-27T09:21:16.010 に答える