私はどこでも並行プログラミングについて聞いています。あなたはそれが何であるか、そしてC++の新しい標準が同じことをどのように促進するかについていくつかの光を投げることができますか?
並行性とは、コードが同時に複数のことを実行することです。これは通常、明示的な「スレッド」で行われますが、他の可能性もあります。たとえば、コードでOpenMPディレクティブを使用する場合、OpenMPをサポートするコンパイラーが自動的にスレッドを生成します。
スレッドは「実行のスレッド」の略です。シングルスレッドC++プログラムでは、実行はmain()で開始され、その後順次実行されます。マルチスレッドプログラムでは、最初のスレッドはmainで開始されますが、ユーザーが指定した関数で開始される追加のスレッドがアプリケーションによって開始される場合があります。これらは、同時に、または元のスレッドと並行して実行されます。
C++ 0xでは、スレッドはstd::thread
クラスを使用して開始されます。
void my_function()
{
// do stuff
}
std::thread my_thread(my_function); // run my_function in its own thread
新しいC++ 0x標準は以下もサポートしています。
std::atomic<>
クラステンプレートを使用したアトミック値と操作、std::mutex
、std::recursive_mutex
など)std::lock_guard<>
、std::unique_lock<>
)std::lock
およびstd::try_lock
関数は、デッドロックの危険を冒すことなく、同時に複数のロックの取得を管理しますstd::condition_variable
、std::condition_variable_any
)thread_local
キーワードDevx.comの記事で、新しいC++ 0xスレッドライブラリのより詳細な概要を説明しました。 C++ 0xのシンプルなマルチスレッド
my blog でC++のマルチスレッドと並行性について書いています。また、このトピックに関する本を書いています: C++ Concurrency in Action 。
「c ++の新しい標準がコンカレントプログラミングをどのように促進するか」と言うとき、すぐに(?)リリースされるC++ 09標準について話していると思います。
現在、ドラフト形式にある新しい標準は、並行プログラミングに役立つ以下の項目をサポートしています。
C++ CSP2-C++の簡単な同時実行
http://www.cs.kent.ac.uk/projects/ofa/c++csp/
CSPは、スレッドとロック、および後付けとして追加されるその他すべての方法とは対照的に、適切な並行パラダイムに基づいています。
(並行プログラミング言語については、Occam-Piを参照してください(CSPにも基づいています))
おそらく、このビデオはあなたのためにいくつかの光を照らすのに役立つかもしれません:-)
http://channel9.msdn.com/posts/Charles/The-Concurrency-Runtime-Fine-Grained-Parallelism-for-C/
同時実行性は、特定のプロセスに対して複数の実行スレッドを持っています。現在、C++は直接サポートしていません。ただし、特定の関数を新しい実行スレッドに結び付けるライブラリがいくつか存在します。 Unix標準はpthreadsライブラリです。
プログラミングパラダイムの将来の方向性に特有の、私のわずかに異なる見解:
並行性とは、ハードウェアがサポートしている場合に一度に複数のことを実行できるようにプログラムを記述することです。現在、ほとんどの言語には、プログラマーがこれを指定できるようにするかなり重くて複雑なメカニズムがあります(例:手動同期のスレッド、OpenMPプリプロセッサーディレクティブなど)。
ハードウェアが改善されると、垂直方向(より高速なシングルコア)ではなく水平方向(より多くのコア)に改善されます。これは、「より高速な」ハードウェアで拡張するために、アプリが「潜在的な同時実行性」を持つ必要があることを意味します。言語は現在、これを最適にサポートするために進化しようとしており、将来の開発に最適な言語の地位にあります。
C++ 0xは、プログラミングの並行性の「古い」方法に対する組み込みサポートを追加しています。さまざまなコンパイラベンダーが、スレッドモデルを抽象化し、スレッド数などの実行時決定を可能にする「新しい」メソッドを追加しています(マシンのハードウェアに基づいて)。特にMicrosoftについては、F#、同時実行ランタイム、並列拡張などを参照してください。
お役に立てば幸いです。
これは、並行プログラミングを理解するのに最適な記事です。 並行プログラミング
読むと、並行プログラミングとC++の全体像を把握できます。
簡単な要約として、並行プログラミングはマルチタスクを行うことであると言えます。プログラムがブロックされると、他のことができます。通常、ネットワーク接続を待機し、I/Oを処理しているときにブロックされます。 fork()
およびスレッドライブラリを使用して、並行プログラミングを促進できます。