2012-01-10 19 views
0

まずは私はGO:Dを愛しています。私はパニック/リカバリーについていくつかの質問があります。パニックは遅延機能でのみ回復できますか?デッドロックが発生したときに遅延関数が呼び出されますか?私はそれをテストしています...なぜあなたはどうしたらいいのですか?パニックと遅延機能の処理

答えて

0

パニックは、遅延ファンクションでのみ回復できますか?

はい、遅延機能のみです。

デッドロックが発生したときにdeferred funcが呼び出されますか?私はそれをテストしています...なぜあなたはどうしたらいいのですか?

Go実行時の作成者による実装の選択です。デッドロックからの復旧は事実上不可能であるという前提があります。

+1

デファーロックがデッドロックで実行されるかどうかは実装の選択肢ではありません。デッドロックがある場合、いくつかの関数は戻ってこないので、deforsはそれらのgoroutineで実行されません。あなたが正しい場合の例外は、ゴルーチンが実行できないデッドロックです。これはパニックを引き起こしますが、遅延機能は実行しません。 –

+0

@エヴァン・ショウ、良い点。ありがとう。 –

+0

@EvanShaw(1)実行時にフル(プログラム全体の)デッドロックが検出されると、遅延関数の実行が開始され、遅延関数がrecover()を呼び出すと、実行時にゴルーチンが再スケジュールされる通常の実行。実行時にこの機能を実装することは可能であり、実装するのは難しくありません。そのため、実装の選択肢であると書いています。 (2)私は、あなたの2番目の文で示唆しているように、部分的なデッドロックは完全なデッドロックよりも問題があると思います。どちらの場合でも、デッドロックからの回復は奇妙で循環的なアイデアです。 –