問題タブ [race-condition]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
5 に答える
4263 参照

javascript - Ajax の同時実行

常にカウントダウンしているタイマーがある Web アプリケーションがあります。その間、クライアントはサーバーを頻繁にチェックして、タイマーにさらに時間が追加されているかどうかを確認します。コードは次のようになります。

もちろん、それよりも少し複雑ですが、固有の競合状態を見ることができます。update 関数と tick 関数の両方がtime同時に変更しようとしている場合はどうなるでしょうか?

率直に言って、私はこの種の同時実行性の問題に対処する方法を理解するのに十分な JavaScript をほとんど知りません。これを行う簡単な方法はありますか、そうでない場合は、もっと学ぶことができるリソースを教えてもらえますか?

ありがとうございました。

0 投票する
5 に答える
828 参照

java - java:競合状態-数行のコードが一緒に実行されるようにする方法はありますか?

トークンを受け取り、それらを解析し、パラメーターが適用される場合はユーザーにログインする登録ページがあります。

トークンをチェックしてからデータベースからトークンを削除するまでの間に、別のユーザーが同じトークンを使用してログインできます。コードの特定の範囲の行が干渉なしで実行されることを確認する方法はありますか?それで、競合状態の問題は発生しませんか?

ありがとう

アップデート

私は2台のサーバーを持っています。

  1. Apache Tomcat 6
  2. red5 v0.9(無料のJavaベースのフラッシュメディアストリーミングおよび通信サーバー)

Facebook用のゲームアプリケーションを書いています。

ゲーム自体はadobeflashbuilder2で書かれています。

ゲーム自体はred5サーバーを使用して提供されます。問題は、red5がリクエストヘッダーとレスポンスヘッダーを受信しないため、Facebookから情報を取得するために使用するセッション情報を取得できないことです。

ユーザーがTomcatサーバーに接続する問題を解決するために、そのページはFacebook関連情報のセッションをチェックし、tinyFBClientを使用してFacebookに接続し、情報をmysql db(ユーザーの詳細)に保存して、これを確認します。同じユーザーは、red5に接続しようとしているユーザーです。

トークンが作成されたら。Tomcatページには、関連するSWFファイル(ゲームファイル)を表示するために、オブジェクトのHTML要素が表示されます。TomcatページはトークンをそのSWFファイルに渡します。SWFファイルがロードされると、そのトークンを取得し、それを使用してred5に接続し、ユーザー情報を検索します。

説明が私のニーズを理解するのに役立つことを願っています。たくさんのご支援ありがとうございます!

0 投票する
1 に答える
195 参照

macos - Race condition when calling FSDeleteObject

I have implemented a "safe save" operation that goes something like this:

  1. Save some data to temporary file A
  2. Copy contents of A to final destination B
  3. Delete A

I have a race condition at step 3 where Mac OS X will occasionally come back with error -47 (fBsyErr) when trying to delete the file using FSDeleteObject. I am completely confident I am the only one modifying this file and suspect the OS is doing something (e.g., background caching tasks) at the time I try to delete the file, resulting in the error.

This is an intermittent issue: normally the FSDeleteObject call works just fine. In those cases where I get the error code back I'd like to safely delete the file "at a later point in time" when the OS is finished playing with it.

What would be the best course of action to take in trying to delete this troublesome temporary file?

0 投票する
5 に答える
1619 参照

python - Python でファイル権限をアサートするときの競合状態を回避する

アプリケーションは、ファイルを解析して「実行」したいと考えており、セキュリティ上の理由からファイルが実行可能であることをアサートしたいと考えています。

少し考えてみると、この最初のコードには競合状態があり、セキュリティ スキームが無効になっていることがわかります。

の間に競合状態が存在します

この 2 つのシステム コール間で、ファイルが異なる内容の非実行ファイルで上書きされる可能性があるためです。

私が持っている最初の解決策は、重要な呼び出しの順序を変更することです (そして、冗長な存在チェックをスキップします):

これは競合状態を解決しますか? どうすれば適切に解決できますか?

セキュリティスキームの根拠、簡単に(私は思った)

ファイルはその環境内で任意のコマンドを実行できるため、シェル スクリプトに匹敵します。

無料のデスクトップには、アプリケーションを定義する .desktop ファイルを含むセキュリティ ホールがありました。このファイルは、引数を使用して任意の実行可能ファイルを指定し、独自のアイコンと名前を選択する可能性があります。そのため、ランダムにダウンロードされたファイルは、任意の名前やアイコンの背後に隠れて、何でも実行できます。それは悪かった。

これは、.desktop ファイルに実行可能ビットが設定されていることを要求することで解決されました。それ以外の場合、ファイルは名前/アイコンでレンダリングされず、フリー デスクトップは開始前にプログラムを開始するかどうかをユーザーに尋ねます。

これを Mac OS X の非常に優れたデザインと比較してください: 「このプログラムは Web からダウンロードされました。本当に開きますか?」

ですから、これと、chmod +xダウンロードしたスクリプトをシェル化する必要があるという事実にたとえて、上記の質問の設計について考えてみました。

結びの言葉

結論としては、シンプルに保つ必要があるかもしれません。ファイルを実行可能にする必要がある場合は、実行可能にして、ユーザーが呼び出したときにカーネルに実行させます。タスクの所属先への委任。

0 投票する
3 に答える
724 参照

.net - 最適化をインライン化する方法は競合状態を引き起こす可能性がありますか?

この質問に見られるように: 拡張メソッドを使用してC#イベントを発生させる-それは悪いですか?

この拡張メソッドを使用してイベントを安全に発生させることを考えています。

しかし、Mike Rosenblumは、JonSkeetの回答でこの懸念を提起しています。

[MethodImpl(MethodImplOptions.NoInlining)]属性をこれらの拡張メソッドに追加する必要があります。そうしないと、デリゲートを一時変数にコピーする試みがJITterによって最適化され、null参照例外が発生する可能性があります。

拡張メソッドがNoInliningでマークされていない場合に競合状態が発生するかどうかを確認するために、リリースモードでいくつかのテストを行いました。

リリースモードでしばらくテストを実行しましたが、NullReferenceExceptionが発生することはありませんでした。

それで、マイク・ローゼンブラムは彼のコメントで間違っていましたか、そしてメソッドのインライン化は競合状態を引き起こすことができませんか?

実際、本当の問題は、SaifeRaiseが次のようにインライン化されるかどうかだと思います。

また

0 投票する
2 に答える
18993 参照

mysql - フィールドをインクリメントするときにMySQLデータベースに競合状態がないことを確認するにはどうすればよいですか?

2つの接続が同じレコードを更新したいときにMySQLデータベースの競合状態を防ぐにはどうすればよいですか?

たとえば、接続1は「試行」カウンターを増やしたいと考えています。そして、2番目の接続も同じことをしたいと考えています。両方の接続SELECTで「試行」がカウントされ、値が増加し、両方の接続で値UPDATEが増加します。突然、「tries」は「tries + 2」ではなく、「tries + 1」になります。これは、両方の接続が同じ「tries」を取得し、それを1つインクリメントしたためです。

この問題を解決する方法は?

0 投票する
6 に答える
506 参照

java - Java での予測不可能なプログラムの動作

私はこれで私の髪を引っ張っています.他の人のJava経験が問題に光を当てることができるかどうかを見てみたいと思いました. 私が書いた大量のプログラム コードがありますが、それ自体がより大きなプロジェクト内にあるため、単純に投稿することはできません。ただし、問題の概要を説明します...

問題: 私のコードは、シミュレーションから予測可能な結果を​​返しません。シミュレーションが実行されるたびに、さまざまな統計が記録されます。コードは同じ (!) にもかかわらず、生成される結果は実行ごとに異なります。

私が確信していることは問題ではありません(ただし、「落とし穴」があると思われる場合は大声で言ってください):

  • 乱数ジェネレーターが使用されますが、毎回同じ値がシードされます。
  • プログラムはシングル スレッドであるため、競合状態は問題になりません。
  • 動作は、デバッグ モード、スタンドアロン jar、および IDE からの通常の実行の両方で発生します (私は Eclipse を使用しています)。
  • 静的メンバーは、リスト内のオブジェクト間で使用されます。for-each コンストラクトが使用されますが、これは毎回同じ順序で実行する必要があります。
  • 前述のリストをソートする場合、 Collections.sort() が使用されるため、安定している必要があります (リストは同じ順序で並べる必要があります)。

私がここで見落としているかもしれない何かを誰かが思いつくことができますか? これは現時点では計り知れないようです!ありがとう!

0 投票する
2 に答える
970 参照

cuda - CUDA での複数スレッドによるデバイス変数の使用

私はcudaで遊んでいます。

現時点では問題があります。特定の応答に対して大きな配列をテストしています。応答を取得したら、データを別の配列にコピーする必要があります。

たとえば、5 つの要素からなるテスト配列は次のようになります。
[ ][ ][v1][ ][ ][v2]

結果は次のようになります:
[v1][v2]

問題は、結果を格納する 2 番目の配列のアドレスをどのように計算するかです。最初の配列のすべての要素が並行してチェックされます。

デバイス変数 int addr = 0 を宣言しようと考えています。応答が見つかるたびに、addrをインクリメントします。しかし、addrは同時に複数のスレッドからアクセスされる可能性があるため、それについてはわかりません。それは問題を引き起こしますか?それとも、別のスレッドがその変数の使用を終了するまで、スレッドは待機しますか?

0 投票する
7 に答える
376 参照

c# - スレッド開始時の競合状態?

次のコードを実行してスレッドを開始していますが、意図したとおりに開始しません。何らかの理由で、一部のスレッドは同じオブジェクトで開始されます (また、一部のスレッドは開始すらしません)。デバッグしようとすると、問題なく開始されます (コードをステップ実行するために F10 をクリックすると、遅延が追加されます)。

これらは私のフォームアプリの機能です:

誰でも私を助けることができますか?

0 投票する
2 に答える
426 参照

php - MySqlクエリのラグタイム/デッドロック?

複数の PHP スクリプトが並行して実行され、それぞれが同じテーブルの同じレコードに対して繰り返し UPDATE クエリを実行している場合、各クエリでテーブルが更新される前に「ラグ タイム」が発生する可能性はありますか?

基本的に、cron 経由で起動された PHP スクリプトのインスタンスが 5 ~ 6 個あり、並行して実行されています。各スクリプトは、テーブル内のすべてのレコードを取得し、itemsそれらをループして処理します。

ただし、同じアイテムを複数回処理することを避けるために、最後に処理されたアイテムの ID を別のテーブルに保存します。これが私のコードの仕組みです:

しかし、あらゆる予防措置にもかかわらず、ほとんどのアイテムは複数回処理されています。これにより、PHP スクリプトによって更新クエリが実行されてから、データベースが実際にレコードを更新するまでの間に、多少のタイムラグがあると思います。

本当ですか?もしそうなら、currentItemId複数のスクリプトが並行して実行されている場合でも、PHP スクリプトが常に最新のものだけを取得するようにするには、他にどのようなメカニズムを使用すればよいでしょうか? データベースヘルプの代わりにテキストファイルを使用しますか?