No.1ベストアンサー
- 回答日時:
http://www.amazon.co.jp/dp/4756116825
かなり古いけどお勧め。
ちなみにSolarisとWindowsでは殆ど互換(パラメタの並びがちがうだけ)ですがLinuxでは動きません。
かなり古いけどお勧め。
ちなみにSolarisとWindowsでは殆ど互換(パラメタの並びがちがうだけ)ですがLinuxでは動きません。
No.2
- 回答日時:
スレッドというのは、OSによりかなり扱い方が異なります。
それらを吸収してくれる、ライブラリ等もありますが、
スレッドの性能を引き出す為には、やはり、
OSの内部構造の知識が必要です。
そこで、Win32に絞った書籍を紹介します
http://www1.axfc.net/uploader/S/so/47938
Win32にターゲットを絞って、スレッド及びその周辺(非同期I/Oなど)
を丁寧に解説されています。ソースコードもたくさん例示されています。
ただし、NT4.0ベースなので、現時点では若干"古い"気がします。
(当然ですが、 .NET等は扱っていません)
しかし、スレッドの基盤となっている技術や、
スレッドを扱う上での基本的な注意点
(排他やデッドロックetc)
は今も昔もそうそう変わらないものです。
その意味では、十分すぎるほど役立つ書籍です。
No.3
- 回答日時:
私も良くマルチスレッドのアプリケーションを作成することがありますが、「Advanced Windows」という書籍はとても良いと思います。
(ジェフリーリッチャー著)
数多くの書籍を探してきましたが、今のところこれ以上の書籍と出会ったことはありません。
値段は少々高いですが(1万円くらい)、マルチスレッドでの排他的制御方法なども濃く記載されており、サンプルコードも豊富なのでよろしいかと思います。
ちなみに現在は第5版が出版されており、上下に分かれています。
それぞれ5000円くらいです。
第5版はVistaで追加された関数なども取り上げられているので、Vista向けのアプリケーションを開発するなら第5版が宜しいかと思います。
XP以下の場合は第4版で十分対応できますよ。
「Advanced Windows 第4版」
http://ascii.asciimw.jp/books/books/detail/4-756 …
No.4
- 回答日時:
No.2です。
あちゃ~。ごめんなさい。
リンク切れになっておりました。
改めて紹介させてください。
http://ascii.asciimw.jp/books/books/detail/4-756 …
"Win32マルチスレッドプログラミング"
James E.Beveridge,Robert Wiener共著/有限会社インフォビジョン訳
ASCII出版
ISBN:4-7561-1404-0 (978-4-7561-1404-4)
です。
本の内容は、以前紹介したので省略します。
ご迷惑おかけしました。
No.5
- 回答日時:
まるで関係ないお話で恐縮ですが
今ならOpenMPという技術もあるので
そちらを勉強してみるのも手かと思いますよ~
VC2005では対応していませんけど。
gcc 4.2 以降とか VC2008なら使えるみたいです。
マルチスレッドって同期処理が難しいので、
なにげに、利用機会ものすごく少ないです。
No.6
- 回答日時:
OpenMPについては、性能が低いという指摘も多いです。
http://www.na.cse.nagoya-u.ac.jp/~reiji/lect/hpc …
そのうち、向上が図られるとは思いますが....
私は、No.5さんとは逆に
"本格的なWinプログラミングにマルチ・スレッドは不可欠"
と考えています。
Windowsアプリはメッセージ駆動ですよね。
メッセージ応答は、ASAP(できるだけ早く)戻る必要があります。
メッセージ応答処理中で5秒も10秒もかかっていたら
どうなるか?
ハングアップしたとみなされるかも知れません。
それでも、長い処理をどうしても行わなければならない場合は
どうするか?
スレッドに頼るしかありません。
WM_TIMERに回す手もありますが、
こいつは優先度も低くく、
おまけに
複数回が1回にまとめられたりもするので、
いまいち、安定性にかけると言わざるを得ません。
GUIも軽くしながら、バックグラウンド処理も効率的かつ安定的に行う。
それには、やはり、スレッドが適していると考えます。
ま、
バックグラウンド処理が、たとえば、印刷処理のような
時間的に”厳しくない"処理であれば、タイマーとかでも十分なので、
最終的には、"使い分け"ということになろうかとは思うのですが...
デュアルコアも普及してきた昨今
マルチ・スレッドは益々重要になると考えています。
単純な並列化であればOpenMPが有利という話もよく耳にします。
(大量の計算を複数コアで同時に行わせるとか...)
しかし、各処理の優先度等、様々な要因を考慮し、
最適なプログラミングを行う必要がある場合には、
まだ”人手"が必要なようです。
No.7
- 回答日時:
OpenMPがもつ一番の魅力は、自分で構築したらすごくシビアになるヘルパースレッドを
コンパイラレベルで自動生成してくれているようなところだと思ってます。
そういう意味では、ワーカースレッド的には使わないかもしれませんね。
#6 にて指摘もされましたが、
確かにGUI環境で処理の完了を待ち続けるのはやってはいけないです。
僕も印刷するのにスレッドがいらないとか非現実的なことを
いうつもりはありません。
僕がスレッドの生成について否定的な部分というのは、
印刷させるとか投げっぱなしジャーマン状態のワーカースレッドじゃなくて
一つの処理を分担して行い、その結果をマージするような
ヘルパースレッドの生成について、作り込むには微妙だなぁというのが正直なところです。
スレッドの同期処理や個数制限ってむずかしくありません?
あと、マルチプロセッサを意識してコーディングすると
たしかにCPUを効率よく使用できますが、それはつまり
一つのアプリがCPUを振り切ることにもつながるので
せっかくのマルチコアがもったいなくなるのではとも思っています。
バッチ処理系の環境を占有しているようなものならいいけど、
リアルタイム系の処理はちょっとこわいかなーと。
でも、OpenMPにしろ、通常のスレッドにしろ、
マルチスレッドの知識は必要ですね。
必要以上にスレッド(or子プロセス)を作りすぎでサーバーをストールさせたりとか
かえって性能を落とさないようにするとか、そういった注意事項を知る上でも
本は読んでおいて損はないと思います。
僕は読まずにやって、↑みたいな失敗をやっちゃっていますので(笑
ちなみに、リンク先はOpenMPの公式サイト(英語)です。
参考まで。
参考URL:http://openmp.org/wp/
No.8
- 回答日時:
>スレッドの同期処理や個数制限ってむずかしくありません?
確かに難しいです。
いつも悩まされます。
ですけど
Win32マルチスレッドプログラミング
には、いろんな手法が載っていますので、役立つと思います。
直接スレッドだけでなく、非同期I/OとかAPCとかI/O 完了ポート とか...
I/O完了ポートはまだ、本格活用していないですが、
スレッド・プールを使いI/Oに基づいて、
スレッド数上下限の範囲内で
スレッドをSuspend/Resumeしてくれる優れものらしいです。
>あと、マルチプロセッサを意識してコーディングすると
>たしかにCPUを効率よく使用できますが、それはつまり
>一つのアプリがCPUを振り切ることにもつながるので
>せっかくのマルチコアがもったいなくなるのではとも思っています。
それはあると思います。
私の場合は、制御系の仕事が多いので、
"暇なコアがあるともったいない"的な感覚もあります。
なんせ、制御しながら、
バックで相当量の計算をおこなうなんてこともよくあるので...
”スレッドをうまく制御すれば、計算がもっと早く終わるんじゃない?
現にコアが1つ暇そうにしてるし...”
みたいなこともあります。
やはり、こういう本を参考に
いろんな技術を適材適所で使うのも大事だなって感じてます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 家政学 編入試験について 1 2022/08/22 03:00
- PHP 「基礎からのMySQL 第3版 Kindle版」を数年前購入して全部やりました。 1 2022/09/15 05:32
- ドイツ語 昭和時代のスキー用語•山用語•医学用語•学生用語は圧倒的に独語多いです。→ これは日本でしか使われて 2 2023/07/02 00:55
- 健康保険 扶養(所得・保険)について 3 2022/05/14 07:48
- IT・エンジニアリング ラズベリーパイでモデルベース開発の学習がしたいです。 1 2022/11/22 21:07
- 電子書籍 PDFの電子書籍化 3 2022/12/31 16:27
- フランス語 フランスパリバ銀行解約を日本でする方法を教えて下さい。 いずれ戻るつもりで口座は締めず、親の介護で1 1 2023/02/01 02:32
- 情報処理技術者・Microsoft認定資格 応用情報技術者試験の午後問題の過去問の解説 1 2023/01/31 16:32
- 相続・遺言 遺言執行に法定相続人の戸籍謄本が必要と聞きましたが・・ 5 2023/02/20 12:58
- 就職 企業に質問した方がよろしいでしょうか? 2 2023/03/01 10:20
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
マイクロソフトedge で5チャン...
-
スレッドの監視方法
-
メモリアクセスの競合について
-
C言語で一定時間待機後、再実行
-
pthread_attr_tへの値の代入に...
-
WaitForSingleObjectの使い方に...
-
別スレッドのデータを受信できない
-
アラート可能な待機状態とは
-
マルチスレッドプログラミング...
-
DirectX 11のConsntanBuffer
-
VB2005 シリアル通信のClose処理
-
Macターミナルで実行中のプログ...
-
VBAの配列サイズとメモリに関して
-
なんかC言語でプログラム書いて...
-
VBSの処理中一旦処理を止めて再...
-
プログラミング ソースコード
-
DoEvents関数って何?
-
MACで動く実行ファイルをWindow...
-
Webプログラムってネイティブア...
-
COMBOBOXで日付入力
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
WaitForSingleObjectの使い方に...
-
スレッドにて同一メモリの書き...
-
VC++スレッドの正しい終了のさ...
-
スレッドの監視方法について
-
Windows上で、シグナル(SIGTERM...
-
スレッドの終了の仕方
-
スレッドの安全な終了のさせ方
-
CWnd::OnTimerのスレッドの取得
-
MFC通信プログラムマルチスレッ...
-
Linuxでスレッド優先度って変え...
-
.netアプリへのSendMessageでフ...
-
VB2005 シリアル通信のClose処理
-
別スレッドからメインダイアロ...
-
マルチスレッドについて
-
スレッドの終了はどうやるんで...
-
マルチスレッドプログラミング...
-
別スレッドのデータを受信できない
-
特定のスレッドの破棄
-
msec単位のWait Timerが作れない!
-
C# スレッド終了の監視について
おすすめ情報