2017-05-10 8 views
2

ここに私の問題に関する場面があります。javascriptでは、varをロックできますか?

私はリモートサーバから取得したデータをバッファするvar dataCacheを作成します。私はこのように30秒ごとにdataChacheを更新します。

setInterval(function(){ 
     instance.loadJsonFromRemote(configuration.dataUrl,function(data){ 
     instance.dataCache = data; 
}); 
}, 30000); 

おそらく、更新中のデータと同時に正確にアクセスされます。例えば

、ラン上記

var cool = instance.dataCache.cool 

コードデータ更新コードの実行中、

instance.dataCache = data; 

ノーならば、それは、アクセス中の可能な解決策は、ロックデータキャッシュアップあろう推測1つはアクセスし、設定することができます。

私はおそらくC#でロックのようなものが必要ですが、JavaScriptでどうやって行うのか分からず、JavaScriptでも問題がないかもしれません。coz JSはシングルスレッドです。私はJSにあまり精通していません。

+3

"JSはシングルスレッドであり、正常に動作します"。 varをロックする必要はありません – R3tep

+1

https://developer.mozilla.org/en-US/docs/Web/JavaScript/EventLoopをご覧ください。あなたは正しいです、ロックのようなものの必要はありません。 –

+0

これもあります:http://stackoverflow.com/questions/2734025/is-javascript-guaranteed-to-be-single-threaded私はあなたのケースであなたにどの程度影響を与えるかもしれません。場合によっては投稿してください。 –

答えて

1

javascriptがシングルスレッドとして実行されるため、ロック機構がありません。

マルチスレッド環境から来た人にとって混乱する理由は、javascriptは常に「非同期」のように動作するからです。しかし、それは事実ではありません。

Javascriptは、何らかのイベントが発生したときに内部的に「コールバック」と連携し、コールバックを実行します。このコールバックはJava/.NET開発者にとっては厄介なことがあります。 Javascriptは常に1つのスレッドで動作し、同時に実行するものはありません。単純なwhile(1){}コードでコールバックが開始された各サイクルで何度も何度も何度も何度もコードを実行する "javascript execution cycle"(See For Event Loop

あなたのケースの唯一の可能な解決策は、更新シナリオをトリガーするsetTimeout関数からのコールバックです。

+1

本当に明確な説明!どうもありがとう! –

関連する問題