Download - マルチスレッド デザインパターン ― Single Threaded Execution
![Page 1: マルチスレッド デザインパターン ― Single Threaded Execution](https://reader037.vdocuments.site/reader037/viewer/2022100518/558badcbd8b42a58208b4620/html5/thumbnails/1.jpg)
第1回Single Threaded Execution
開発部てるー
![Page 2: マルチスレッド デザインパターン ― Single Threaded Execution](https://reader037.vdocuments.site/reader037/viewer/2022100518/558badcbd8b42a58208b4620/html5/thumbnails/2.jpg)
マルチスレッドプログラムの安全性
安全性とは、オブジェクトのフィールドが予想外の値をとらないことを意味する
複数のスレッドが利用しても安全性が保たれるクラスをスレッドセーフなクラスと呼ぶ
![Page 3: マルチスレッド デザインパターン ― Single Threaded Execution](https://reader037.vdocuments.site/reader037/viewer/2022100518/558badcbd8b42a58208b4620/html5/thumbnails/3.jpg)
Single Threaded Execution パターンとは
● 同時に1つのスレッドだけしか処理を実行できないように制限を設けるパターン
● 別の呼び方○ Critical Section○ Critical Region
![Page 4: マルチスレッド デザインパターン ― Single Threaded Execution](https://reader037.vdocuments.site/reader037/viewer/2022100518/558badcbd8b42a58208b4620/html5/thumbnails/4.jpg)
登場人物
● SharedResource 役○ 複数のスレッドからアクセスされるクラス○ もっているメソッドは以下の2つに分類される
■ safeMethod■ unsafeMethod
![Page 5: マルチスレッド デザインパターン ― Single Threaded Execution](https://reader037.vdocuments.site/reader037/viewer/2022100518/558badcbd8b42a58208b4620/html5/thumbnails/5.jpg)
safeMethod
複数のスレッドから同時に呼び出しても、もともと問題のないメソッド
![Page 6: マルチスレッド デザインパターン ― Single Threaded Execution](https://reader037.vdocuments.site/reader037/viewer/2022100518/558badcbd8b42a58208b4620/html5/thumbnails/6.jpg)
unsafeMethod
複数のスレッドから同時に実行されると、インスタンスの状態が矛盾する恐れのあるメソッド
![Page 7: マルチスレッド デザインパターン ― Single Threaded Execution](https://reader037.vdocuments.site/reader037/viewer/2022100518/558badcbd8b42a58208b4620/html5/thumbnails/7.jpg)
unsafeMethod
複数のスレッドから同時に実行されると、インスタンスの状態が矛盾する恐れのあるメソッド
複数のスレッドからアクセスされないようにガードする必要がある
![Page 8: マルチスレッド デザインパターン ― Single Threaded Execution](https://reader037.vdocuments.site/reader037/viewer/2022100518/558badcbd8b42a58208b4620/html5/thumbnails/8.jpg)
解決法
unsafeMethod を、同時に1つのスレッドからしかアクセスできないようにガードする
Java では、unsafeMethod を synchronized メソッドにすることでガードを実現する
![Page 9: マルチスレッド デザインパターン ― Single Threaded Execution](https://reader037.vdocuments.site/reader037/viewer/2022100518/558badcbd8b42a58208b4620/html5/thumbnails/9.jpg)
どんなときに使うのか?
● マルチスレッドのとき
● 複数のスレッドからアクセスされるとき
● 状態が変化する可能性があるとき
● 安全性を保つ必要があるとき
![Page 10: マルチスレッド デザインパターン ― Single Threaded Execution](https://reader037.vdocuments.site/reader037/viewer/2022100518/558badcbd8b42a58208b4620/html5/thumbnails/10.jpg)
デッドロック
2つのスレッドが2つのロックを取り合い、互いに相手のスレッドがロックを解放するのを待つ現象。
![Page 11: マルチスレッド デザインパターン ― Single Threaded Execution](https://reader037.vdocuments.site/reader037/viewer/2022100518/558badcbd8b42a58208b4620/html5/thumbnails/11.jpg)
Single Threaded Execution パターンがデッドロックを起こす条件
1. 複数の SharedResource 役がある
2. スレッドが、ある SharedResource 役のロックを取ったまま、他の SharedResource 役のロックを取りに行く
3. SharedResource 役のロックを取る順序が定まっていない
![Page 12: マルチスレッド デザインパターン ― Single Threaded Execution](https://reader037.vdocuments.site/reader037/viewer/2022100518/558badcbd8b42a58208b4620/html5/thumbnails/12.jpg)
継承異常
SharedResource 役のフィールドがサブクラスからアクセス可能になっている
+サブクラスにガードされていない unsafeMethod を作ってしまう
=安全性が失われる
![Page 13: マルチスレッド デザインパターン ― Single Threaded Execution](https://reader037.vdocuments.site/reader037/viewer/2022100518/558badcbd8b42a58208b4620/html5/thumbnails/13.jpg)
パフォーマンス
Single Threaded Execution パターンは以下の理由により、パフォーマンスを低下させる
● ロックの取得に時間がかかるため
● スレッドの衝突によって待たされるため
![Page 14: マルチスレッド デザインパターン ― Single Threaded Execution](https://reader037.vdocuments.site/reader037/viewer/2022100518/558badcbd8b42a58208b4620/html5/thumbnails/14.jpg)
お わ り