問題タブ [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.
linux - 競合状態なしでrename()を行う方法は?
A
名前をに変更したいが、存在しないB
場合に限り、単純なことは、存在するかどうか(withまたはそのようなもの)をB
チェックし、それが続行しないかどうかを確認することです。残念ながら、これによりウィンドウが開き、その間に他のプロセスが作成を決定する可能性があり、その後上書きされます。さらに悪いことに、そのようなことが起こったという兆候はありません。B
access("B", F_OK)
rename
B
他のファイルシステムアクセス機能はこれに悩まされていません-open
持っています(ファイルのコピーは安全です)、そして最近Linuxは他のほとんどの競合状態から保護するsyscallO_EXCL
のファミリー全体を手に入れました-しかしこの特定のものではありません(存在しますが、まったく異なる問題)。*at
renameat
それで、それは解決策を持っていますか?
vb.net - parallel.forを使用してデータテーブルに行を追加します
私はこのサブを持っています:
これは、parallel.forループで実行されているいくつかの関数によって呼び出されています。
問題は、時々(完全にランダムに)エラーが発生することです:
ライン上Dim ln = t_erori.Rows.Add
。
これは、同じ行を2回追加しようとしているためだと思います。どうすればこれを機能させることができますか?または、これを行うために他にどのような方法を使用できますか?
私のアプリはそこにいくつかの結果を書き込んでいるので、このデータテーブルが必要ですが、parallel.forで機能する結果を保存する他の方法は問題ありません。
locking - ファイルを削除しようとしているときにファイルが変更されていないことを確認してください
POSIX環境で、ファイルをディスクから削除したいのですが、ファイルを削除する前にチェックサムを計算して、ファイルが変更されていないことを確認します。ロックは十分ですか?それを開き、リンクを解除し、チェックサムを計算してから閉じる必要がありますか(OSがiノードを削除できるようにするため)?他のプロセスがファイル上に開いているファイル記述子を持たないようにする方法はありますか?
少しコンテキストを与えるために、コードはホスト間でファイルの同期を実行します。リモートホストがファイルを削除したが、ファイルがローカルで変更されている場合、データが失われる可能性があります。
asp.net - Facebook Connect と HTTP Cookie - この「競合状態」を克服するにはどうすればよいですか
「Race Condition」とは何かと疑問に思っている場合は、システムの欠陥ですが、タイミングに大きく依存しています。詳細については、こちらのウィキを参照してください。
したがって、私が持っている条件は、Facebook Connect に関連し、ASP.NET 4.0 Web アプリケーション (フォーム ベース認証 - IIS7) を使用してシングル サインオン サービスを実装することです。
プロセス自体(ログアウトを含む)はうまく機能していますが、.....
100% 正確に機能していないシナリオを次に示します。
- ユーザーが Facebook にログインします。
- ユーザーが私のウェブサイトに移動します。
- ユーザーは自動的にログインされません (ただし、ログインする必要があります)。
- ユーザーがページを更新すると、自動的にログインされます。
ステップ 3 でコードをブレークポイントすると、Facebook の Cookie はまだ存在しません ( HttpContext.Current.Request.Cookies
.
しかし、ページがリロードされると (ステップ 4)、Facebook の Cookie が存在します。
私にとって、それはいくつかの可能性があります:
Facebook が私のアプリケーションに Cookie へのアクセスを許可していないだけなのか (クロスドメイン ハンドシェイクの遅延 - xd_receiver.htm)、クロスドメイン Cookie 自体と ASP の問題なのかはわかりません。 NET ページのライフサイクル。
他の誰かがこの問題に対処しましたか?
これは「万能」ではありませんが、面倒です (そして、ユーザーの観点からはあまり良くありません)。
編集:
わかりました、今何か変なことに気づきました。(Facebook経由で)Facebookにログインし、20秒待ってから私のWebサイトにアクセスすると、まだログインしません。2回目のロード後にのみログインします。タイミングの問題ではないかもしれません-なぜですかCookie を読み取るには 2 回更新する必要がありますか?
混乱を解消するために、Facebook は Cookie を設定し (ユーザーが Facebook にログインしている)、私の Web サイトはこれらの Cookie を読み取ります。
これは、すべてのページ要求で発生します (すべての単一ページにあるユーザー コントロールのロジック)。
したがって、最初の更新では、HttpContext.Request.Cookies には何もありません。
2 回目の更新では、それらはそこにあります。
これは、ページ要求ごとに FB.Init がクライアント側で実行されるためだと思います。これは、Cookie を初期化するものです。そのため、(Facebook にログインした後) サーバー側 (Cookie をチェックする場所) で初めて私の Web サイトにアクセスしたとき、この関数はまだ実行されていません。
だから私はここで負け戦を戦っていると思います(クライアント側に設定されているCookieサーバー側にアクセスしようとしています)。
編集2:
これが私の初期化コードです(window.loadで実行):
私は今、次のようなことをしようとしています:
しかし、JavaScript エラーが発生しています。「FB.getLoginStatus」は関数ではありません。=(
これは、次の JavaScript ライブラリを使用しているためです: http://static.ak.connect.facebook.com/js/api_lib/v0.4/FeatureLoader.js.php/en_US
他の人はこれを使うと言っていますが: http://connect.facebook.net/en_US/all.js
新しい JS API の doco を見ていました。
このスレッドに出くわした他の人への参照として、ここに「古い」JS API のドコがあります: http://developers.facebook.com/docs/reference/oldjavascript/
したがって、FB.Connect.get_status() を使用してこの問題を解決し、ユーザーが認証されている場合はウィンドウをリロードします。
みんなの助けに感謝します。
これは、他の誰かが気にする場合の問題に対する私の「解決策」です。
もちろん、window.location.reload() を実行する前に、フォーム認証 Cookie を確認する必要があります。そうしないと、ページが更新され続けます。=)
iphone - iPhoneの一時ファイルの書き込みにおける競合状態(?)
iPadシミュレーターで一時ファイルを作成しています。ファイルの作成をテストするために、ファイルを作成してから読み返します。これを示すコードは次のとおりです。
最終関数がUIImageをフォトアルバムに書き出す前に、これらのメソッドを次々に呼び出します。
問題は、3回目の実行時にアプリが常にクラッシュすることです。1回目と2回目は、これらすべてを正常に実行し、アルバムに保存します。3回目はホームにクラッシュします。何か案は?
c# - C# での競合状態の処理
階層化された通信インターフェイスを備えたアプリケーションを作成しています。
これは、アプリケーションのユーザー インターフェイス部分から通信を抽象化し、さらにスケーラビリティと保守性を高めるために行われました。
例えば:
上の図の各ボックスを個別のクラスと考えてください。
Generic Comms Interface は、トランザクション データと通信の「正常性」を表す文字列変数を設定します。これらは、一連のパブリック関数呼び出しを通じてアプリケーションにコピーされます。たとえば、アプリケーションは App-Sub-System を呼び出します。
sText
クラス内の他の関数によって非同期に設定されます。と次の行の
間で競合状態が発生していると思います。
誰かがこの競合状態を回避または防止する方法を提案できますか? ヘルプを使用しますか、それともこれを行うべき別の方法はありますか?string sRetVal = this.sText;
this.sText = null;
StringBuilder
javascript - AJAX リクエストの同期を試みています
私は自分が書いた Facebook ゲームの新機能に取り組んでいます。このゲームでは、プレーヤーはヨーロッパの都市間を移動し、商品を配達して利益を得ることができます。私が追加しようとしているこの機能は、経路探索 AI をゲームに追加します。プレイヤーが移動先の都市を選択できるようにします。その後、ゲームは自動的にプレイヤーの列車を開始都市から目的地の都市まで軌道に沿って移動させます。私は AJAX と setTimeout() を使用してバックエンドからデータを取得し、都市を結ぶ線路に沿って列車が移動できるようにしています。私がやろうとしていることをよりよく理解するために (できれば) コードを参照してください。
問題は、setTimeout() が頻繁に呼び出されることです。ENROUTE と ARRIVED の 2 つの値を含む statusFinalDest というグローバル変数を設定しました。列車が ENROUTE である間、バックエンドが ARRIVED の statusFinalDest を返すまで、JS 列車移動関数は setTimeout を使用して自身を呼び出します。この時点で、列車移動タイムアウト ループは (おそらく) 終了します。ただし、バックエンドが処理するターンごとに myEventMoveTrainManual() を 1 回呼び出す代わりに、statusFinalDest の変更された状態を認識していないかのように、非常に頻繁に呼び出されます。この過剰な動作を終わらせるために、より多くの制限構造をコードに入れようとしましたが、それらは機能していないようです。
関連する FBJS (Facebook JS) コードは次のとおりです。
バックエンドの PHP コードは次のとおりです。
java - Swing 使用時の競合状態 (?)
Penumbra を介して OpenGL を使用しようとすることから、Graphics コンテキストを使用して JPanel に直接描画しようとすることに移りました。
問題が発生していることを除けば、これは素晴らしいことです...コードをコンパイルすると、25回に1回、グラフィック(例では長方形)がうまく描画されます。他の〜24回はそうではありません。
これが私のコードです:
機能draw-line
は以下です。
何が起こっているのかわかりません。最初は私が取り組んでいる参照だと思っていましたが、それらを削除しましたが、まだこれらの問題があります. lein と slime/swank と emacs もリセットしました。私はかなり困惑しています。
いつものように、助けていただければ幸いです。これが答えのある質問であることを願っています!最近、私は不可能を求めているようです:)
locking - 両方のプロセスに触れることなく相互排除
私には独特の問題があります。1つのファイルにアクセスしようとしている2つのプロセス(P0とP1)があります。P0はファイルに情報を書き込んでおり、P1は情報を読み取っています。P0が書き込みを終了する前にP1が読み取りを行っている、2つの間に競合状態が発生しています。ロック、セマフォなどの使用を検討しました。ただし、P1は、変更が許可されていない一連のコードに存在し、現在、上記の修正案をサポートする実装はありません。
両方のコードセットに触れることなく、この競合状態を取り除く方法はありますか?
c# - SQL Server DB 列に IDENTITY のようなインクリメントを手動で実装する際の競合状態の回避
LINQ to SQL を使用する ASP.NET MVC 2 サイトを構築しています。私のサイトが DB にアクセスする場所の 1 つで、競合状態が発生する可能性があると思います。
DB アーキテクチャ
という名前の関連する DB テーブルの列の一部を次に示しますRevisions
。
- RevisionID - bigint、IDENTITY、PK
- PostID - bigint、
Posts
テーブルの FK から PK - EditNumber - 整数
- RevisionText - nvarchar(最大)
私のサイトでは、ユーザーは投稿を送信し、後で投稿を編集できます。元の投稿者以外のユーザーが投稿を編集できるため、1 つの投稿で複数の編集を同時に行うことができます。
投稿を送信すると、Posts
テーブル内のレコードが作成され、PostIDがレコードの ID に設定され、 RevisionTextが投稿テキストに設定され、EditNumberRevisions
が 1 に設定されたテーブル内のレコードが作成されます 。Posts
投稿を編集すると、Revisions
レコードのみが作成され、EditNumberは最新の編集番号よりも 1 大きい値に設定されます。
したがって、EditNumber列は、投稿が編集された回数を示します。
EditNumber のインクリメント
これらの関数を実装する上での課題は、EditNumber列をインクリメントすることです。その列をIDENTITYにすることはできないため、その値を手動で操作する必要があります。
新しいリビジョンに必要なEditNumberを決定するための LINQ クエリを次に示します。
最大値を計算して増加させると、競合状態が発生する可能性があります。
その機能を実装するより良い方法はありますか?