14

Click here to load reader

マルチスレッド デザインパターン ― Single Threaded Execution

Embed Size (px)

DESCRIPTION

「デザインパターン入門 マルチスレッド編」輪読会、第1回「Single Threaded Execution」のスライド。

Citation preview

Page 1: マルチスレッド デザインパターン ― Single Threaded Execution

第1回Single Threaded Execution

開発部てるー

Page 2: マルチスレッド デザインパターン ― Single Threaded Execution

マルチスレッドプログラムの安全性

安全性とは、オブジェクトのフィールドが予想外の値をとらないことを意味する

複数のスレッドが利用しても安全性が保たれるクラスをスレッドセーフなクラスと呼ぶ

Page 3: マルチスレッド デザインパターン ― Single Threaded Execution

Single Threaded Execution パターンとは

● 同時に1つのスレッドだけしか処理を実行できないように制限を設けるパターン

● 別の呼び方○ Critical Section○ Critical Region

Page 4: マルチスレッド デザインパターン ― Single Threaded Execution

登場人物

● SharedResource 役○ 複数のスレッドからアクセスされるクラス○ もっているメソッドは以下の2つに分類される

■ safeMethod■ unsafeMethod

Page 5: マルチスレッド デザインパターン ― Single Threaded Execution

safeMethod

複数のスレッドから同時に呼び出しても、もともと問題のないメソッド

Page 6: マルチスレッド デザインパターン ― Single Threaded Execution

unsafeMethod

複数のスレッドから同時に実行されると、インスタンスの状態が矛盾する恐れのあるメソッド

Page 7: マルチスレッド デザインパターン ― Single Threaded Execution

unsafeMethod

複数のスレッドから同時に実行されると、インスタンスの状態が矛盾する恐れのあるメソッド

複数のスレッドからアクセスされないようにガードする必要がある

Page 8: マルチスレッド デザインパターン ― Single Threaded Execution

解決法

unsafeMethod を、同時に1つのスレッドからしかアクセスできないようにガードする

Java では、unsafeMethod を synchronized メソッドにすることでガードを実現する

Page 9: マルチスレッド デザインパターン ― Single Threaded Execution

どんなときに使うのか?

● マルチスレッドのとき

● 複数のスレッドからアクセスされるとき

● 状態が変化する可能性があるとき

● 安全性を保つ必要があるとき

Page 10: マルチスレッド デザインパターン ― Single Threaded Execution

デッドロック

2つのスレッドが2つのロックを取り合い、互いに相手のスレッドがロックを解放するのを待つ現象。

Page 11: マルチスレッド デザインパターン ― Single Threaded Execution

Single Threaded Execution パターンがデッドロックを起こす条件

1. 複数の SharedResource 役がある

2. スレッドが、ある SharedResource 役のロックを取ったまま、他の SharedResource 役のロックを取りに行く

3. SharedResource 役のロックを取る順序が定まっていない

Page 12: マルチスレッド デザインパターン ― Single Threaded Execution

継承異常

SharedResource 役のフィールドがサブクラスからアクセス可能になっている

+サブクラスにガードされていない unsafeMethod を作ってしまう

=安全性が失われる

Page 13: マルチスレッド デザインパターン ― Single Threaded Execution

パフォーマンス

Single Threaded Execution パターンは以下の理由により、パフォーマンスを低下させる

● ロックの取得に時間がかかるため

● スレッドの衝突によって待たされるため

Page 14: マルチスレッド デザインパターン ― Single Threaded Execution

お わ り