私はUDP
、2 つの異なるカメラ (イベントベースのキャプチャ) から (経由で) 画像を受信し、画像を処理 (3D 再構成) する UBUNTU プラットフォームに取り組んでいます。この操作を、画像受信操作の進行中に、画像処理操作が並行して開始されるように実行したいと考えています。これら 2 つの並列操作に 2 つの posix スレッドを使用できることはわかっています。process()
しかし、スレッドが少なくとも 1 組のイメージを受信した後にスレッドが正確に開始されるように、これら 2 つのスレッドを同期する方法がわかりませんreceive()
。スレッドに条件 (画像のペアを受信するたびにスレッドによって設定される) をprocess()
待機させると、受信は処理よりもはるかに高速になり、mutex
receive()
receive()
スレッドは、単一の画像ペアがprocess()
スレッドによって処理されている間に何度も条件を設定する可能性があります。この操作を達成するためのより良い方法は何ですか?
1 に答える
2
処理する画像 (または各画像へのポインター、またはメカニズムが何であれ、情報に関する構造体) を受信スレッドのスレッドセーフ キューに入れます。アイテムをエンキューした後、セマフォまたはpthread_condを使用して処理スレッドにシグナルを送ります。
処理スレッドは、cond シグナルを受信するまでブロックする必要があり、キューが空の場合にのみブロックする必要があります。このスレッドのブロックが解除されると、キューから画像がポップされ、作業が開始されます。処理が終了したら、(ループの先頭で) ブロックするか、別の画像を処理するかを決定する必要があります。キューが空の場合、ブロックされます。キューが空でない場合は、イメージをポップして処理します。
于 2012-05-02T12:12:11.997 に答える