Hatena::ブログ(Diary)

えでぃの技術日誌

2013-03-10

マルチスレッド処理の基礎(1) - 参考資料

連載の期間がどのくらいになるかあまり見通しが立っていない部分もあるので、より深く学びたい方への参考資料を先に紹介しておきます。

書籍

マルチスレッド処理の基礎について、体系的に解説している書籍です。

.NET Frameworkのマルチスレッドプログラミングについて、日本語で初歩の初歩から解説している本は、私の知る限り現状存在しないようです。この本の例はJavaで書かれてはいますが、マルチスレッド関係の基礎的な機能はJava.NET Frameworkで類似している部分も多いので、書籍で基礎を学びたい方にはこの本がおすすめです。


Javaの並行処理ライブラリ(java.util.concurrent)の設計関係者が書いた書籍の翻訳版です。ライブラリ設計の背景やテストの方法など、より専門的で高度な内容を扱っています。汎用的で実績のあるクラスライブラリ設計思想を学びたい方には、とても有用な書籍だと思います。

java.util.concurrentと似たような役割を持つ.NET Frameworkのクラスライブラリとしては、System.Threading.TasksやSystem.Collections.Concurrentが該当すると思います。

(設計思想的に異なる部分もありますので、あくまでも「役割」が似ている、という認識でいた方がよいと思いますが)


プログラミング.NET FRAMEWORK 第3版 (Microsoft Press)

プログラミング.NET FRAMEWORK 第3版 (Microsoft Press)

.NET Frameworkの機能について体系的に解説している書籍です。第5部で.NET Frameworkのマルチスレッド処理について解説が行われています。

原著は.NET Framework 4.5を対象とした第4版が出版されていますが、現時点での翻訳の最新版は .NET Framework 4までを対象とした第3版のため、気を付けてください。

Webページ

非同期プログラミングのパターン | Microsoft Docs


スレッドの落とし穴 (1/6) - ITmedia エンタープライズ

同時実行: マルチスレッド アプリケーションについてすべての開発者が知っておかなければならないこと -- MSDN Magazine, 2005 年 8 月

メモリ モデル: マルチスレッド アプリケーションにおける低ロック テクニックの影響について -- MSDN Magazine, 2005 年 10 月

MSDN マガジンのバックナンバー

メモリバリア - Wikipedia


マネージ スレッドの例外 | Microsoft Docs

高可用性: .NET Framework の信頼性機能でコードを実行し続ける -- MSDN Magazine, 2005 年 10 月

信頼性 | Microsoft Docs

補足:C#Javaの相違点

排他制御(自オブジェクト)

C#

public void Method()
{
    lock(this) { … }
}

Java

public synchronized void method() {
    …
}
排他制御(他オブジェクト)

C#

lock(obj) { … }

Java

synchronized(obj) { … }

シグナル待ち

C#

lock(obj)
{
    Monitor.Wait(obj);
    …
}

Java

synchronized(obj) {
    obj.wait();
    …
}

シグナル通知

C#

lock(obj)
{
    Monitor.PulseAll(obj);
    ...
}

Java

synchronized(obj) {
    obj.notifyAll();
    ...
}
Connection: close