6. 付録¶
6.1. デッドロック管理¶
6.1.1. デッドロック管理の概要¶
im-propagation では、複数のスレッドから同一の「データ処理クラス」が実行されないようロック制御されています。そのため、複数のスレッドでデータの伝搬が発生し、かつ、実行される「データ変換クラス」が連続する場合、デッドロックが発生する可能性があります。im-propagation には、デッドロックが発生した場合の検出機能が組み込まれています。「データ処理クラス」をロックする際の待機時間や、デッドロック検知時間の設定は、「im-propagation 設定」に定義します。設定ファイルの詳細は、「設定ファイルリファレンス - im-propagation 設定 」を参照してください。
6.1.2. デッドロック時の動作¶
デッドロックが発生する代表的なパターンを下図に示します。デッドロックを検出すると、データの伝搬は失敗扱いとなり、PropagationManager#send() メソッドを実行した際に SendException が発生します。送信側では、SendException を捕捉した場合、PropagationManager#abort() メソッドを呼び出してセッションの中断処理を行います。すると、受信側にもセッションの中断処理を行わせるため、「データ処理クラス」の onAbort メソッドが呼び出されますので、後処理が必要な場合、このメソッド内で処理を行います。