Decisionをつねにdupして、ThreadPoolに投げこんで処理をすすめていたが
毎回@sessionを利用してDBに書くのもSVMを利用するとなるとコストが高いのでdupしないでいけるようにデザイン変更。
その際、deadlockが発生していたが、原因は以下だった。
1. Decisionのstatusが1度実行するとdoneになる。
2. statusをreadyにしなかったため、2度目の実行がすぐに終わってしまう。
3. Agentは、Decisionの終了を待つため、condition_waitするがその前に
Decisionがready statusじゃないので、Decision::start/finalizeを
実行せずに終了してしまう。つまり、spin_lockして待つわけではないので、Agentのcond_waitを待たない。 したがってdeadlockしてしまう。
とりあえずstatusをちゃんと変更するようにして解消

0 件のコメント:
コメントを投稿