問題タブ [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.
multithreading - 競合状態とは何ですか?
マルチスレッド アプリケーションを作成するときに発生する最も一般的な問題の 1 つは、競合状態です。
コミュニティへの私の質問は次のとおりです。
- レースコンディションとは?
- それらをどのように検出しますか?
- それらをどのように扱いますか?
- 最後に、それらの発生をどのように防止しますか?
.net - .NET の競合状態アナライザー
C++、C、および Java 用の競合状態分析ツールがいくつかあるのを見てきました。.NET に対して同じことを行う静的解析ツールを知っている人はいますか?
error-handling - awk は存在しないファイルをレースなしでスキップできますか?
awk (gawk) に見つからないファイルを無視またはスキップさせる方法はありますか? つまり、ファイル システムに存在しなくなった、コマンド ラインで渡されたファイルです (たとえば、/proc/[1-9]* の下で急速に出現/消失するファイル)。
デフォルトでは、見つからないファイルは致命的なエラーです:-(
次のようなことと同等のことができるようにしたいと思います。
ラッパー スクリプトは、awk が実行される前にファイルが存在することを確認できません。これは、ファイルがチェックされてから awk がファイルを開こうとするまでの間にファイルが消える可能性があるためです。つまり、競合状態です。(タイミングはタイトですが、awk内でチェックしてから開くことも競合状態です)
mysql - mysql挿入競合状態
MySQL で競合状態を停止するにはどうすればよいですか? 当面の問題は、単純なアルゴリズムによって引き起こされます。
- テーブルから行を選択する
- 存在しない場合は、挿入します
次に、重複する行を取得するか、一意/主キーを介してそれを防止すると、エラーが発生します。
通常、ここではトランザクションが役立つと思いますが、行が存在しないため、トランザクションは実際には役に立ちません (または、何か不足していますか?)。
特にテーブルが 1 秒間に複数回更新される場合、LOCK TABLE はやり過ぎのように聞こえます。
私が考えることができる唯一の他の解決策は、すべての異なる ID に対して GET_LOCK() ですが、より良い方法はありませんか? ここでもスケーラビリティの問題はありませんか? また、すべてのテーブルに対してこれを行うのは少し不自然に聞こえます。これは、同時実行性の高いデータベースでは非常に一般的な問題のように思えます。
database - Djangoでの不可分操作?
私は(私が思うに)カウンター用の非常に単純なデータモデルを実装しようとしています:
誰かがやってくると、visitTypeとvisitDateに一致する行を探します。この行が存在しない場合は、counter=0で作成されます。
次に、カウンターをインクリメントして保存します。
私の懸念は、このプロセスが完全に人種であるということです。2つのリクエストが同時にエンティティが存在するかどうかを確認し、両方がエンティティを作成する可能性があります。カウンターを読み取ってから結果を保存するまでの間に、別の要求が発生してそれをインクリメントする可能性があります(結果としてカウントが失われます)。
これまでのところ、Djangoのドキュメントでもチュートリアルでも、これを回避する良い方法は見つかりませんでした(実際、チュートリアルの投票部分に競合状態があるようです)。
これを安全に行うにはどうすればよいですか?
apache-flex - mx:Flex で競合状態を移動する
Flex には、たくさんのMove
エフェクトとAnimateProperty
エフェクトがあります。
私のコードのいくつかの異なる場所で見つけたのは、明らかな理由もなく効果が途中で止まることが非常に頻繁にあるということです。
アプリケーションのさまざまな場所でこれを発見しましたが、特に複雑なことを行っているかどうかに関係なく発生します。
他の誰かがこの問題を経験しましたか?
javascript - JavaScript 競合状態の回避
私のユーザーには、基本的にはスプレッドシートの簡素化されたバージョンが表示されます。グリッドの各行にテキスト ボックスがあります。テキスト ボックスの値を変更すると、入力の検証を実行し、グリッドを駆動するコレクションを更新し、ページの小計を再描画します。これはすべてOnChange
、各テキストボックスのイベントによって処理されます。
ユーザーがボタンをクリックするとSave、ボタンのOnClick
イベントを使用して金額の最終的な検証を行い、入力内容全体を Web サービスに送信して保存します。
少なくとも、フォームをタブでSubmitボタンに移動すると、それが起こります。
問題は、値を入力してすぐに保存ボタンをクリックすると、完了SaveForm()
する前に実行が開始UserInputChanged()
され、競合状態になることです。私のコードでは を使用していませんが、遅い検証コードsetTimeout
をシミュレートするために使用しています。UserInputChanged
検証コードを高速化できるとは思いません。かなり軽量ですが、検証が完了する前にコードが Web サービスを呼び出そうとするほど遅いようです。
私のマシンでは、コードの保存が始まる前に検証コードが実行されるかどうかの間のマジック ナンバーは ~95ms です。これは、ユーザーのコンピューターの速度に応じて、より高くなったり低くなったりする場合があります。
この状態を処理する方法を知っている人はいますか? 同僚は、検証コードの実行中にセマフォを使用し、保存コードでビジー ループを使用してセマフォのロックが解除されるまで待機することを提案しましたが、コードでビジー ループを使用することは避けたいと思います。
queue - POSIXセマフォのみを使用してウェイクアップ待機レースを回避することは可能ですか?良性ですか?
POSIXセマフォを使用して、キューを表すファイルからのアトミックなgetおよびputを管理したいと思います。完全に無関係なプロセスがキューを共有できるように、ファイルシステムに名前を付ける柔軟性が必要です。この計画ではpthreadが除外されていると思います。名前付きのposixセマフォは、すべてのプロセスが認識できるものをファイルシステムに配置するのに最適ですが、標準のCondWaitプリミティブが見つかりません。
CondWaitがプロセスによって呼び出されると、アトミックにsemに投稿され、condを待機します。他のプロセスがcondにポストするとき、待機中のプロセスは、semもアトミックにデクリメントできる場合にのみウェイクアップします。の代替
このプロセスが待機する直前に、他のプロセス信号が競合状態になるという競合状態が発生します。
並行プログラミングを行うことはほとんどないので、SOに尋ねると思いました。条件変数に標準のPOSIXカウントセマフォを使用する場合、このレースは良性である可能性がありますか?
誰かがより大きなコンテキストを必要とする場合に備えて、シェルスクリプトから呼び出すことができるアトミックキューのgetおよびput操作を構築しています。
java - アンマーシャリング中に ElementNSImpl から独自の型への断続的な ClassCastException
マーシャリングされていないオブジェクトのリストを反復処理しようとするとClassCastExceptions が発生することがあり、追跡が非常に困難な問題が発生しています。重要なビットは時々、再起動後に特定のコードが正常に動作することです。これは、同時実行/タイミング/競合状態の方向を示しているようです。JAXBContext も、マーシャラーとアンマーシャラーも同時に使用されていないことを確認できます。ロックによってそれらへのアクセスをシリアル化するところまで行きました。
ただし、Spring DM を介して個々のバンドルが非同期に初期化される OSGi プラットフォームで実行しているため、2 つの異なるバンドルが同時に JAXBContext を作成している可能性があります。
いずれにせよ、これらの断続的なClassCastExceptions を引き起こす可能性のある原因についての説明へのポインタをいただければ幸いです。コード自体は正常に動作しているが、何らかの外部要因が動作に影響を与えているように見えることを示すため、断続的であることが重要です。
例外の具体例を次に示します (会社固有のものを削除したことに注意してください)。
180行目のそのメソッドは、アンマーシャリングされたオブジェクト内のTunnelTypeオブジェクトのコレクションをループするfor()コンストラクトです(アンマーシャリングは問題なく機能します)。
実際のオブジェクトのアンマーシャリングが正常に行われたとすると、JAXB が ElementNSImpl オブジェクトをネストされたコレクション内に残すことは物理的に可能でしょうか?
実行時環境:
- JAXB2.1
- OSGi
- 春のDM
- JAXBContext は、整列化/非整列化されるクラスを含むバンドルの ClassLoader で初期化されます
python - お問い合わせフォームのメールが失われないようにする (python)
お問い合わせフォームのあるウェブサイトを持っています。ユーザーが名前、電子メール、メッセージを送信すると、サイトから詳細が電子メールで送信されます。
非常にまれに、サーバーの電子メール システムに問題があるため、ユーザーにエラーが発生し、連絡先の詳細が失われます。(言わないでください:より良いサーバーを入手してください。どのサーバーでも時々メールがダウンする可能性があり、多くの提出があります)。
メール送信機能がエラーコードで戻ってきた場合に、ユーザーの詳細を保存できるシステムを実装したいと考えています。それ以降の送信ごとに、保存されている送信を確認し、それらを私に送信してみてください。
しかし、データを保存する方法は?
私はpythonを使用しているので、shelve(単一ファイルの半データベース)を使用することを考えました。それとも、誰かがより良いデータ形式を提案できますか? (完全なデータベース ソリューションはやり過ぎだと思います。)
単一ファイルのアプローチで見られる問題は、競合状態です。2 つ以上のメールが同時に失敗すると、データ ファイルが 2 回編集され、データが破損します。
じゃあ何をすればいいの?マルチファイル ソリューション、ファイルのロック、または何か他のものですか?