1

簡単に言えば、2 つのモーターを並行して操作し、両方の準備が整ったら、3 番目のスレッドを続行します。

以下は、私が今持っているものの画像です。2 つのトップ スレッドでは、モーター B と C を「無制限」に設定し、両方がスイッチをトリガーするまで待機してから、両方に個別のブール変数を設定します。

次に、3 番目のスレッドで、これら 2 つの変数を 1 秒間隔でポーリングし、AND 演算でループ終了条件が true になるまで続けます。

3 スレッド

これは組み込みシステムなので、ここでは問題ないかもしれませんが、「PC プログラミング」では、この種のポーリング ループを行うのはかなり恐ろしいことです。

質問:両方のいずれかを実行できますか?

  • この種のポーリングループなしで変数を待ちますか?
  • 変数をまったく使用せずにスレッドが終了するのを待ちますか?
4

1 に答える 1

0

あなたの質問は、実際に何を達成したいのか、どの言語を使用しているのかについて少し曖昧です。私が理解しているように、Labview で同様のマルチスレッド モーター制御メカニズムを実装できるようにしたいですか?

もしそうなら、両方の質問に対する答えは「はい」です。明示的に定義された変数なしで待機を実装できます(とにかく渡しているエラークラスターを除く)。最も簡単な方法は、エラー クラスターを両方のループに渡し、ループが終了したら Merge errors を使用して生成されたエラーを結合することです。マージ エラーは、両方の入力にデータが含まれるまで待機し、エラーをマージして、マージされたエラー クラスターを渡します。マージされたエラークラスターをティアダウン関数に接続することで、説明したスレッド同期を効果的に実現できます。ただし、2 つの制御ループにスレッド同期が必要な場合でも、セマフォ、ランデブー、ノーティファイア、およびその他の組み込み同期メソッドを使用する必要があります。

非常に単純なスレッド同期

画像には、2 つのシリアル デバイス (紫色のワイヤ) を開き、それらを制御ループに渡す init 関数があります。これらは両方とも、エラー (黄黒色のワイヤ) が発生するまで実行されます。両方のエラーがマージされ、シリアル デバイスを解放するティアダウン関数に渡されます。この特定の例では、各ループからティアダウン関数へのワイヤが少なくとも 1 本ある限り、プログラムの最後で同期が行われることに注意してください。

テキストベースのプログラミング言語で同様の機能を使用するには、より複雑なメカニズムを使用する必要がありますが、並列プログラミング用の特殊な言語がここで役立つ場合があります。

于 2014-03-15T10:21:59.593 に答える