1

POSIXスレッド:2つの異なるスレッドを使用して呼び出される2つの関数があります。スレッドでは条件付き待機を使用しており、他のスレッドではシグナル送信条件を使用しています。どのスレッドも先に実行できるため、waitが呼び出されていない場合でもシグナルが送信される可能性があります。送信されたシグナルを保存して、呼び出しが待機しているときに同じプロセスの他のスレッドが以前に呼び出されたシグナルを使用できるようにします。POSIXでそうする方法はありますか?

4

2 に答える 2

0

待機条件だけでは、スレッドを同期するのに十分ではありません。マキシムがすでに述べたように、信号は失われたり、理由なく送信されたりする可能性があります。

スレッド間で渡される追加情報が必要です。これは通常、キューを使用して行われます。ただし、単純なケースでは、トリガーのみが必要な場合は、intasカウンターで十分な場合があります。

おおまかに次のようになります。

送信者:

get_lock();
counter++;
release_lock();

受信機:

while(1){
  get_lock();
  while(counter==0)
     wait_on_lock();
  counter--;
  release_lock();
  do_work();
}
于 2012-09-10T17:54:30.753 に答える