2 つのスレッド thread1 と thread2 を作成しています。スレッド 1 はアナログ値を読み取り、スレッド 2 はスレッド 1 で読み取られて PWM 引数を設定するアナログ値を処理します。私が今まで行ったことは、メインファイル(スレッドを作成している場所)でグローバル変数を宣言し(アナログ値を保存するため)、グローバル変数へのポインターを両方のスレッドに渡したことです。スレッド 1 では、読み取りアナログ値がグローバル変数に格納され、スレッド 2 ではグローバル変数が読み取られて処理されます。だから、私の質問は、これを行う別の方法はありますか? つまり、このアプリケーションに最適なセマフォ、ミューテックスなどがありますか?
2 に答える
あなたの質問に対する一般的な答えはありません。それは多くのユースケースに依存します。
pthread の古典的な方法は、mutex-condition ペアを使用して、値の変更を読み取りスレッドに通知することです。これは、そのスレッドがほとんどアイドル状態で、変更に対して行う作業しかない場合に適しています。ここで、ミューテックスに加えて条件変数を使用すると、読み取りスレッドが何もしていない間、読み取りスレッドがリソースを消費しないことが保証されます。
読み取りスレッドが永続的な作業を行っており、値を使用する必要がある場合は、さまざまなシナリオがあります。最初のシナリオは、変数をミューテックスで保護し、読み取った値が途中で更新されないようにすることです。それによって常に一貫しています。
より現代的なアプローチは、読み取りおよび書き込み操作がアトミックであることを使用 (または保証) することです。新しい C 標準である C11 はそのためのインターフェイスを提供し、ほとんどのコンパイラはそのような操作を拡張機能として既に実装しています。
これには非常に基本的なミューテックスが必要になると思います。以下の擬似コードを参照してください。
Thread1() {
Mutex_lock();
Process global variable;
Unlock_mutex();
}
同様のスレッド2..現在のコードを提供していただければ、より具体的な回答を提供できます。