10

私はWindowsでマルチスレッドを試していて、すべきかどうか疑問に思っていました

Pthreadを学習することは、そのようなアプリケーションをさまざまなプラットフォームで開発しようとした場合に役立ちますが、Win32 APIを学習しないことで何かを失うことはありますか?または、どちらも十分に似ているので、一方を学習することで、もう一方を簡単に理解できますか?

4

5 に答える 5

7
  1. ブーストスレッドを使用します。C ++ 0xが登場すると、std::threadsが作成されます。Boostスレッドは、stdスレッドに最も近い実装を持っています。

  2. それ以外の場合は、pthreadを使用します。Pthreadsはstd::threadsに2番目に近く、stdスレッドとブーストスレッドの主要な基盤を形成しました。

  3. それ以外の場合は、Windowsを直接スレッド化します。スレッドがどのように機能するかを学び、物事のメンタルモデルを形成することができます。少し非標準的な同期プリミティブを使用する傾向があります。

于 2010-03-08T19:52:35.873 に答える
1

CreateThread多くのWindowsプログラミングを行う場合は、基本的なWin32スレッド構造(クリティカルセクション、インターロックされた関数、、など)を学ぶのにお金がかかりますWaitFor*Object。これらは理解するのが難しくなく、他のスレッドの同等のオブジェクトに透過的に変換されます。フレームワーク。

ただし、セマフォやイベントなどのより高度なスレッド構造の場合は、pthreadsライブラリを使用します。これらのドキュメントはより明確になり、例がより豊富になる傾向があるためです。

于 2010-03-08T18:20:03.023 に答える
1

C / C ++を使用している場合は、C /C++ランタイムのスレッド関数を使用してみてください。Win32(または他の非CRT関数を使用してスレッドを作成する)を使用すると、CRTが新しいスレッドで正しく初期化されず、あらゆる種類の問題が発生する可能性があります(http://www.codeguru.comで確認できます)。 /forum/archive/index.php/t-371305.html)。

ただし、ほとんどのスレッド機能(CRT、Win32、またはpthread)はすべて、スレッドの作成、スレッドの同期、およびスレッドの破棄を行う機能に基づいています。実際には、これは必ずしも使いやすいとは限りません。

昨年は、タスクベースのスレッド化に移行する傾向があります(まあ、私はそれをそのように呼んでいます、正式な名前が何であるかはわかりません)。スレッドを開始してロジックを実行する代わりに、タスクベースのスレッドでは、タスクを作成してから、「スレッドロジック」にタスクの実行を依頼します。

スレッドを操作するこの新しい方法をサポートするシステムは次のとおりです。

  • Visual Studio 2010(数日待つ必要があります)
  • インテルスレッディングビルディングブロック

Visual Studio 2010には、「並列タスク」をデバッグするための特別なデバッグロジックもあります(そう思われます)。

于 2010-03-08T20:05:25.207 に答える
0

私は、pthreadに固執することで、私の正気を3つの点で節約できることを発見しました。

  • 習慣的に品質が高くないWinAPIドキュメントを介して戦う必要はありません。
  • スレッドで多くのことをする人は誰でもpthreadを手伝うことができます。オンラインでpthreadに関するより多くの優れた情報源を見つけました。
  • WinAPIを使用して「HelloWorld」よりも複雑なものを実装する場合は常に、合理的に予想できるよりもはるかに長い時間がかかることがわかります。しかし、それは私の経験的なインプットにすぎません。

機能に関する限り、pthreadに何かが欠けていることは一度もありません。そのため、他の場所を探す必要があるとは思いません。あなたが取り組むどんな環境でもあなたが使うことができるであろう図書館を学ぶために言われることもたくさんあります。

于 2010-03-08T18:13:24.210 に答える
0

std::threadを見てください

http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2184.html

そしてはじめに

http://www.devx.com/SpecialReports/Article/38883

于 2010-03-08T18:13:48.890 に答える