次の方法で共有


非同期イベントとコンカレンシー

重要

これは Azure Sphere (レガシ) のドキュメントです。 Azure Sphere (レガシ) は 2027 年 9 月 27 日に 再提供されておりユーザーは現時点で Azure Sphere (統合) に移行する必要があります。 TOC の上にある Version セレクターを使用して、Azure Sphere (統合) のドキュメントを表示します。

Azure Sphere プラットフォームでは、イベント ループや POSIX pthread など、非同期イベントとコンカレンシーを処理するためのいくつかの一般的な POSIX および Linux メカニズムがサポートされています。

サンプルでは、 Azure Sphere イベント ループ を使用して、イベント ドリブン シナリオを安全に管理する方法を示します。 たとえば、UART サンプルは、デバイスが UART 経由でデータを受信するまで、または UART 経由でデータを送信するボタンが押されるまで、一時停止します。

イベント ループは、ほとんどのグラフィカル ユーザー インターフェイスと標準の Linux パターンの標準的な部分です。 Azure Sphere イベント ループは、Azure Sphere アプリケーションが更新に関連するイベントなどのシステム通知を受信できるようにするイベント ループの特定の実装です。

次の理由から、イベント ループ パターンをお勧めします。

  • OS やアプリケーションの更新通知などのシステム イベントを管理するには、Azure Sphere イベント ループが必要です。 デバイスの更新を延期するには、イベント ループを使用する必要があります。

  • イベント ループを使用すると、複数のタスクを同時に進行できるように、非同期プログラミングが可能になります。

  • イベント ループにより、メモリのオーバーヘッドが最小限に抑えられます。 各スレッドには、個別のスタックのメモリ オーバーヘッドが伴います。 Linux スタックは仮想メモリを使用して割り当てられ、オンデマンドで上限まで拡張されるため、固定コストは発生しません。 そのため、リソース コストが増えるため、Azure Sphere MT3620 などの制約付きシステムにスレッドを実装するのが困難になります。

  • スレッド間の同期は複雑であり、デッドロックなどの問題につながる可能性があります。 この点では、イベント ループの方が簡単です。

実行可能な場合はイベント ループを使用することをお勧めしますが、アプリケーションにスレッドが必要な場合、Azure Sphere では POSIX pthreads がサポートされます。 スレッドセーフの実行を保証するのは、アプリケーションの責任です。 一部の applibs 関数に対するアプリケーション呼び出しはスレッド セーフですが、ヘッダー ファイルに示されているように、スレッド セーフでない関数もあります。 ヘッダー ファイルにスレッド セーフが記載されていない場合は、関連する関数またはライブラリがスレッド セーフでないと想定する必要があります。