タグ

threadとマルチスレッドに関するhonamisのブックマーク (2)

  • 第3回 マルチスレッドでデータの不整合を防ぐための排他制御 ― マルチスレッド・プログラミングにおける排他制御と同期制御(前編) ―

    第3回 マルチスレッドでデータの不整合を防ぐための排他制御 ― マルチスレッド・プログラミングにおける排他制御と同期制御(前編) ―:連載.NETマルチスレッド・プログラミング入門(3/3 ページ) lockステートメントよりも低コストな排他制御 lockステートメントによるパフォーマンス低下を軽減するそのほかのアプローチとしては、.NET Frameworkのクラス・ライブラリで用意されている「Interlocked」と「ReaderWriterLock」というクラスを使用することもできる。そのクラスの仕様から、使用する機会は限定されるかもしれないが、それがフィットする場面では積極的に活用したい。次に、これら2つのクラスについて説明していく。 ■スレッドセーフな変数の操作を提供するInterlockedクラス lockステートメントは非常にコストのかかるオペレーションであるが、.NET

    第3回 マルチスレッドでデータの不整合を防ぐための排他制御 ― マルチスレッド・プログラミングにおける排他制御と同期制御(前編) ―
  • マルチスレッドプログラミングは難しい

    C# を使って、複数スレッドで協調動作する簡単なメッセージキューの 作成がいかに苦労するかというのをお見せします。(約62分) まとめ: キューのみ → エラーになる。 キュー + spin lock (ポーリング) → 動くけどCPUの無駄。 キュー + ウェイト×1 → 一度に複数回 送られたらダメ。 キュー + ウェイト×2 (ぎっこんばったん方式) → queue じゃない。 キュー + ウェイト + 条件判定 → 受け取り側が複数個あるとダメ。 キュー + Semaphore → ようやく完成。 マルチスレッドプログラミングは世界を滅ぼす。 参考資料: Unixで動くC#コンパイラ: gmcs (Mono), cscc (dotgnu, C#) エディタ: Emacs で csharp-mode.el。 文書: monodoc, ECMA-335。 (新山はこのツールでXMLをプ

  • 1