web-dev-qa-db-ja.com

C ++でのタスクベースのプログラミングには、新しい言語標準機能が必要ですか?

だから私はGoingNative 2012:誰もが質問できるインタラクティブパネルでこれらすべてのC++マスターと一緒にYoutubeでこのビデオを見ました。

これは私が話していたビデオです: GoingNative 2012-1日目-インタラクティブパネル:ネイティブであることの重要性

そして時間0:24:00に誰かが非常に興味深い質問をしました:

私たちはしばらくの間、pthreadやwindowsスレッドなどを使用して並行プログラミングを行ってきました。C++とCが並行プログラミングに追いついてうれしいですが、すでに5年または10年遅れているように思えます何年もの間、現在これらの強力なマルチコアがすべてあり、これらのマルチコアのプログラミングはスレッドに基づくべきではなく、タスクベースである必要があります[...]とMicrosoftには PPLライブラリなど。これは、C++標準にはまったく反映されていません。 [...]私が恐れている唯一のことは、標準がスレッドにロックされて、タスクベースのプログラミング...

今、私はこれらの概念に非常に慣れていないので、少し混乱しています。実際にはタスクベースのプログラミングとは何ですか。この用語は、ロックフリープログラミングと同じ意味ですか?これらの2つの同等の用語ですか、それらの間にリンクはありますか?

8
user91225

Microsoftには「タスク並列ライブラリ」またはTPLがあります。

これはスレッドよりも高いレベルの抽象化であり、ライブラリベースです。TPLは既にスレッドベースであり、その実装のための言語標準(キーワードasyncawaitがC#コンパイラに追加され、そのようなプログラミングが容易になりました)。

Microsoftエコストラクチャーの TaskFuture or Promise とほぼ同等です。基本的に、これは非ブロッキング(非同期)関数です。これを呼び出すと、新しいスレッドで実行されている間、制御が戻ります。その後、戻り値が利用可能になったときに、戻り値を取得します。

TPLには、Parallel.Forなどの他の機能があり、複数のスレッドを使用してループを同時に処理できます。これらすべては、ライブラリー関数としてC++で実装できます。実際、そのようなライブラリには すでに書かれています があります。

私の知る限り、PPL(Microsoft C++の並列パターンライブラリ))は、特別な言語機能に依存していません。

4
Robert Harvey

Cppには、年齢を問わず、threads-via-blocksライブラリがあります。 Intelの Thread Building Blocks は非常に優れており、同様に OpenMP のような類似したものがあります。方法(これはVC++でサポートされています。ビルドで/ openmpフラグを設定する必要があります)

Microsoftは Casablanca にも取り組んでいます。これは、真に汎用的なタスクライブラリではないかもしれませんが、 Erlangのようなものを使用して(主にWebアプリの目的で)タスクベースのシステムを作成するためのフレームワークです。俳優モデル

0
gbjbaanb