2011-12-19 11 views
1

私は、アレイ var anArray = [.....values inside...];非同期foreachからの値の更新は安全ですか?

 anArray.forEach(function (s) { 
      ... 
     }); 

も更新されます2つのグローバル変数をループ非同期のforEachました:、私は両方の変数をforeachの中に

var count = 0; 
var total = 0; 

更新されます。 foreachは非同期であるため、複数の繰り返しが同時に実行されることがあります。つまり、私の変数は書かれているかもしれません。

countについては、私がやっていることはすべてループ内のカウント++です。

totalの場合、各ルックアップ時に異なる値が追加されます。

totalが精度を失うことなく更新されることを確実にするために、とにかく私はありますか?

+0

あなたは「精度」とはどういう意味ですか?精度の問題を引き起こす可能性のある「合計」の順序に頼っていますか?つまり、「a + b + c」または「c + b + a」ですか? – pimvdb

+0

「非同期forEach」とは何ですか? – nnnnnn

+0

@nnnnnn사과私はArray.forEachが非同期であると仮定していましたが、ここでいくつかの解答を読んだ後で。それはそうではありません! – tommi

答えて

2

JavaScriptで何のスレッドはありません。 「非同期」とは、イベントをキューにポストし、メインスレッドが使用可能なときにイベントを評価することを意味します。したがって、JSでは同期の問題が発生することはありません。例えば

は、あなたが実行した場合:

setTimeout(function() {doSomeStuff1For(10secs)},1) 
setTimeout(function() {doSomeStuff2For(20secs)},1) 

これらのイベントは(最初になるように考慮10秒のコール幸運)のように実行されます。

1 sec: doSomeStuff1 
2 sec: doSomeStuff1 
... 
10 sec: ended doSomeStuff1 
11 sec: started doSomeStuff2 
... 
30 sec: ended doSomeStuff2. 
1

count++total += 10と同じように動作するので違いはありません。しかし、それはとにかく問題ではありません。 Javascriptでコードの並行実行は行われません

も参照してください:http://ejohn.org/blog/web-workers/

関連する問題