私はプロデュースによってファイルを読み取り、消費者によってそれらを他のファイルに書き込んでいます。入力ファイルがプロデューサーによって読み取られると、セマフォの1つを閉じる必要があり、消費者はプロデューサーが新しい入力をバッファーに挿入するのを待ちません。それを行う方法はありますか?
よろしく...
私はプロデュースによってファイルを読み取り、消費者によってそれらを他のファイルに書き込んでいます。入力ファイルがプロデューサーによって読み取られると、セマフォの1つを閉じる必要があり、消費者はプロデューサーが新しい入力をバッファーに挿入するのを待ちません。それを行う方法はありますか?
よろしく...
いくつかの可能性:
pthread_kill()
待機中のコンシューマーにシグナルを送信するために使用します。これにより、リターン コードsem_wait()
を確認できるから除外されます。EINTR
これも、競合を避けるために慎重にコーディングする必要があります。私は POSIX シグナル処理に特に精通していませんが、正しく処理するには細心の注意を払う必要がある独自の荷物が付属していると確信しています。もちろん、それが完了したらpthread_join()
、セマフォが破棄/クローズされる前に、誰か (プロデューサー スレッド?) がすべてのコンシューマー スレッドがクリーンアップされるのを待つ必要があります。
条件変数オプションは、セマフォを使用してコード化されたものを既に持っている場合、おそらくより大きな変更であり、生成および消費される通常のケースではパフォーマンスが低下する可能性があります (おそらく)。しかし、考えられる競合状態について推論し、正しく処理する方が簡単だと思います。簡単だと言っているのではなく、簡単かもしれないことに注意してください。