C は、さまざまな種類のアプリケーション、特により複雑に動作するアプリケーションやシステム リソースに対する要求が高いアプリケーションで広く使用されている人気のあるプログラミング言語です。したがって、近年の C 開発では非同期プログラミング手法がますます重要になっています。この記事では、C を非同期プログラミングに使用する方法を検討します。
非同期プログラミングの背景
退屈で時間のかかる一部のタスクについては、同期プログラミング モデルではニーズを満たすことができません。オペレーティング システムは、システム リソースをより多く使用するために、これらのタスクを非同期モードに設定することがよくあります。効率的に。 。非同期プログラミング モデルを使用すると、プログラムは前のタスクの完了を待たずに複数のタスクを並行して実行できます。これは、プログラムの全体的なパフォーマンスの向上に役立ちます。
非同期プログラミングのヒント
C で非同期プログラミングを行う場合は、非同期ライブラリを使用する必要があります。その中で、C 11 標準には、メインスレッド以外のスレッドで関数を実行できる非同期ライブラリ std::async が含まれています。 std::async 関数を使用する具体的なプロセスは次のとおりです:
1. 非同期タスク: std::future オブジェクトを作成します。
2. 非同期タスクで関数を実行するには、 std::async 関数を使用して関数とパラメーターを指定します。
3. メイン スレッドで他のタスクを実行し、結果を取得する前に非同期タスクが完了するのを待ちます。
以下はサンプル コードです:
//ヘッダー ファイルをインクルード
//非同期タスク
int foo(int x) {
1 |
|
}
//メイン関数
int main() {
1 2 3 4 5 6 7 8 9 10 11 |
|
}
メインスレッドで非同期タスクが完了するのを待っていると、メインスレッドがブロックされることに注意してください。したがって、次のように、 std::future_status 列挙型の 1 つである std::future_status::ready を使用して、非同期タスクが完了したかどうかを検出できます。
//非同期タスクが完了したかどうかを検出します。完了しました Complete
if (result.wait_for(std::chrono::seconds(0)) == std::future_status::ready) {
1 |
|
}
Inさらに、std::promise と std::future を一緒に使用して、よりきめ細かい非同期プログラミングのニーズを満たすこともできます。たとえば、マルチスレッド プログラミングでは、他のタスクを実行する前に 1 つのスレッドが完了するまで待機する必要がある場合があります。このとき、std::promise と std::future を使用してセマフォ メカニズムを実装できます。 # #//ヘッダー ファイルをインクルード
include
1 2 |
|
//メイン関数
int main () {1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
|
この例では、std::promise を使用して、セマフォ値 (void) を非同期スレッドに送信します。非同期スレッドがタスクを完了した後、次を使用します。 set_value() 関数を使用してセマフォ値をメインスレッドに返します。メインスレッドは、実行を続行する前に、非同期スレッドが完了するまで待つ必要があります。
概要
非同期プログラミングは C プログラミングにおける重要なスキルであり、プログラム全体のパフォーマンスと同時実行性を向上させることができます。この記事では、C による非同期プログラミングの基本原理を紹介し、関連するコード例をいくつか示しました。プログラムのパフォーマンスを向上させたい場合、またはマルチスレッド プログラミングを実行する必要がある場合、非同期プログラミング スキルは習得する必要があるコア テクノロジの 1 つです。
以上がC++ の非同期プログラミング手法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。