私はWindowsでマルチスレッドを試していて、すべきかどうか疑問に思っていました
- Win32APIを使用する
- Windows用のPOSIXスレッドを使用する
Pthreadを学習することは、そのようなアプリケーションをさまざまなプラットフォームで開発しようとした場合に役立ちますが、Win32 APIを学習しないことで何かを失うことはありますか?または、どちらも十分に似ているので、一方を学習することで、もう一方を簡単に理解できますか?
私はWindowsでマルチスレッドを試していて、すべきかどうか疑問に思っていました
Pthreadを学習することは、そのようなアプリケーションをさまざまなプラットフォームで開発しようとした場合に役立ちますが、Win32 APIを学習しないことで何かを失うことはありますか?または、どちらも十分に似ているので、一方を学習することで、もう一方を簡単に理解できますか?
ブーストスレッドを使用します。C ++ 0xが登場すると、std::threadsが作成されます。Boostスレッドは、stdスレッドに最も近い実装を持っています。
それ以外の場合は、pthreadを使用します。Pthreadsはstd::threadsに2番目に近く、stdスレッドとブーストスレッドの主要な基盤を形成しました。
それ以外の場合は、Windowsを直接スレッド化します。スレッドがどのように機能するかを学び、物事のメンタルモデルを形成することができます。少し非標準的な同期プリミティブを使用する傾向があります。
CreateThread
多くのWindowsプログラミングを行う場合は、基本的なWin32スレッド構造(クリティカルセクション、インターロックされた関数、、など)を学ぶのにお金がかかりますWaitFor*Object
。これらは理解するのが難しくなく、他のスレッドの同等のオブジェクトに透過的に変換されます。フレームワーク。
ただし、セマフォやイベントなどのより高度なスレッド構造の場合は、pthreads
ライブラリを使用します。これらのドキュメントはより明確になり、例がより豊富になる傾向があるためです。
C / C ++を使用している場合は、C /C++ランタイムのスレッド関数を使用してみてください。Win32(または他の非CRT関数を使用してスレッドを作成する)を使用すると、CRTが新しいスレッドで正しく初期化されず、あらゆる種類の問題が発生する可能性があります(http://www.codeguru.comで確認できます)。 /forum/archive/index.php/t-371305.html)。
ただし、ほとんどのスレッド機能(CRT、Win32、またはpthread)はすべて、スレッドの作成、スレッドの同期、およびスレッドの破棄を行う機能に基づいています。実際には、これは必ずしも使いやすいとは限りません。
昨年は、タスクベースのスレッド化に移行する傾向があります(まあ、私はそれをそのように呼んでいます、正式な名前が何であるかはわかりません)。スレッドを開始してロジックを実行する代わりに、タスクベースのスレッドでは、タスクを作成してから、「スレッドロジック」にタスクの実行を依頼します。
スレッドを操作するこの新しい方法をサポートするシステムは次のとおりです。
Visual Studio 2010には、「並列タスク」をデバッグするための特別なデバッグロジックもあります(そう思われます)。
私は、pthreadに固執することで、私の正気を3つの点で節約できることを発見しました。
機能に関する限り、pthreadに何かが欠けていることは一度もありません。そのため、他の場所を探す必要があるとは思いません。あなたが取り組むどんな環境でもあなたが使うことができるであろう図書館を学ぶために言われることもたくさんあります。