2

ここで、JavaScript のデッドロックと次のコードを確認しました。

var loop = true,
block = setTimeout(function(){loop = false}, 1);
while(loop);

それは間違いなく無限ループであり、ブラウザのフリーズを引き起こします. と言われていdeadlock is created when one operation wait another one to be executed and vice-versaます。
私の質問は、それを除いて、どのような状況でデッドロックが発生し、それを回避する方法ですか?

4

2 に答える 2

8

これはデッドロックではなく、単なる無限ループです。複数のスレッドがデータにアクセスすることはできないため、JavaScript でデッドロックが発生することはありません。

ここで何が起こるかというと、ループが終了せず、js エンジンが (スクリプトに関して) モノスレッドであるため、スケジューラは に与えるコールバックを呼び出すことはありませんsetTimeout。実際、2 行目がなければまったく同じ動作をしていたでしょう。

于 2013-05-13T20:03:42.583 に答える