問題タブ [locking]
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.
sql - ビューを使用したクエリでの WITH NOLOCK テーブル ヒントの使用 - ビュー内で伝播しますか?
SQL Server のビューで "WITH NOLOCK" クエリ ヒントが使用されている場合、ビュー定義の生のテーブルに NOLOCK が使用されていなくても、そのヒントはビュー定義自体に伝達されますか? これが必要な理由は、サポート スタッフが時間のかかる膨大なクエリを実行したいが、アプリケーション自体内のビューを使用するすべてのクエリでこのロックを強制したくない場合があるためです。
java - 静的メンバーには特別な同期ブロックが必要ですか?
次のようなクラスがあります。
オブジェクトが同期されていると見なすことができますか、それとも静的メンバーであるため問題がありますか?
編集:異なるスレッドが doSomething() にアクセスしている可能性があり、その場合、オブジェクトはスレッドセーフな方法でアクセスする必要があることに注意してください。
java - 別のスレッドで条件が解決されるまで、1 つのスレッドをスリープ状態にする
これは、(私が思うに) 同じことを達成する 2 つのコードの塊です。
私は基本的に、Java 1.5 の同時実行性を使用して Thread.sleep(long) から逃れる方法を学ぼうとしています。最初の例では ReentrantLock を使用し、2 番目の例では CountDownLatch を使用しています。私がやろうとしていることの要点は、別のスレッドで状態が解決されるまで、1 つのスレッドをスリープ状態にすることです。
ReentrantLock は、他のスレッドをウェイクアップするかどうかを決定するために使用しているブール値にロックを提供し、次に条件を await/signal と共に使用して他のスレッドをスリープさせます。私が知る限り、ロックを使用する必要がある唯一の理由は、複数のスレッドがブール値への書き込みアクセスを必要とする場合です。
CountDownLatch は ReentrantLock と同じ機能を提供しているようですが、(不要な?) ロックはありません。ただし、必要なカウントダウンが1つだけで初期化することで、意図した用途を乗っ取っているような気がします。複数のスレッドが1つのタスクで待機している場合ではなく、複数のスレッドが同じタスクで動作する場合に使用することになっていると思います。
だから、質問:
ReentrantLock コードで「正しいこと」のためにロックを使用していますか? 1 つのスレッドでブール値にのみ書き込みを行う場合、ロックは必要ですか? 他のスレッドを起動する前にブール値をリセットする限り、問題は発生しませんよね?
このタスクにより自然に適した、ロックを回避するために使用できる CountDownLatch に似たクラスはありますか (このインスタンスではロックを回避する必要があると仮定します)。
このコードを改善するために知っておくべき他の方法はありますか?
例 1:
例 2:
windows - Windowsファイル共有ロックの解放
この問題は時々発生します。私たちのビルドマシンは、通常のWindowsファイル共有を介してファイルにアクセスできます。誰かがマシン上のフォルダをリモートで参照し、ウィンドウを一晩開いたままにすると、ビルドは失敗します(現在のように)。エクスプローラーウィンドウは、ソースツリーのサブフォルダーの1つに開いたポイントを残しました。ビルドはソースを削除し、ビルドする前にクリーンチェックアウトを実行します。削除は失敗しています。
今、ビルドを機能させたいと思います。自宅からログインしているので、ビルドマシンを再起動したくありません。マシンを探している人とファイルを把握できず、リモートでマシンを再起動できません。
Windows共有にロックがある場合、ロックプロセスはシステムであるため、通常のロックのようにそれを強制終了することはできないと思います。
マシンを再起動せずに共有フォルダのロックを解除する方法を知っている人はいますか?
linux - ロックファイルを使用してスクリプトの 2 つのインスタンスが同時に実行されるのを回避するときに競合状態を回避するにはどうすればよいですか?
同じスクリプトの 2 つのインスタンスが同時に実行されるのを回避する一般的な方法は、次のようになります。
競合状態を回避して、シェルスクリプトからファイルをロックするより良い方法はありますか? 代わりにディレクトリを使用する必要がありますか?
php - PHPでロックを取得する最良の方法
APC で変数を更新しようとしていますが、多くのプロセスがそれを実行しようとしています。
APC はロック機能を提供していないため、他のメカニズムを使用することを検討しています...これまでに見つかったのは、mysql の GET_LOCK() と php の flock() です。他に検討する価値はありますか?
更新: sem_acquire を見つけましたが、ブロッキング ロックのようです。
c# - .netでロックはどのように動作しますか?
Fooの外部の何かがFooのオブジェクトアクセサーを次のように呼び出すと、
ロックはどのように発生しますか?Update()を実行しているスレッドは、上記のforeachがオブジェクトリストの処理を完了するまで待機する必要がありますか?これら2つが同時に機能することを望みますが、オブジェクトのディープコピーを作成する唯一の解決策はありますか?
java - Is this broken double checked locking?
Checkstyle reports this code as "The double-checked locking idiom is broken", but I don't think that my code actually is affected by the problems with double-checked locking.
The code is supposed to create a row in a database if a row with that id doesn't exist. It runs in a multi-threaded environment and I want to avoid the primary-key-exists SQL-exceptions.
The pseudo-code:
I can agree that it looks like double-checked locking, but I am not using static variables and the code in fetch() and create() is probably too complex to be inlined and put out of order.
Am I wrong or checkstyle? :)
oracle - ネットワークの停止により、DB リンクを介したストアド プロシージャのクエリが永久にハングする
私がサポートする多くのストアド プロシージャは、WAN 経由でリモート データベースにクエリを実行します。ネットワークはときどきダウンしますが、これまでに起こった最悪の事態は、手順が失敗し、再起動する必要があったことです。
ここ数週間、不吉な方向に進んでいます。手順が失敗する代わりに、奇妙なロック状態でハングします。これらは Oracle 内で強制終了することはできず、それらが存在する限り、プロシージャの他のコピーを実行しようとするとハングします。私たちが見つけた唯一の解決策は、OS からの「kill -9」で問題のあるプロシージャを強制終了することです。これらの手順の一部は、数か月、さらには数年も変更されていないため、DB または DB 構成に根本的な原因があると思われます。
問題を解決するために私たちができることについて何か考えがある人はいますか? または、PL/SQL には、プログラムで処理できる例外を作成できるように、コードに追加できるタイムアウト メカニズムがありますか?
java - 非常に異常な状況 - 保持しているロックでスレッドがブロックされていますか?
私が取り組んでいるこのJavaプログラムは、起動時にハングしているように見えるので、jconsoleを使用して問題をデバッグしてみました。結局のところ、次のように宣言されているメソッドへの呼び出しを待機しています-
しかし、ここにクレイジーな部分があります。「同期」メソッドのロックは、ブロックされているスレッドによって既に保持されています。getThreadInfo() MXBean メソッドを実行した後の JConsole のスクリーンショットを添付しました。
lockOwnerId と threadId が同じであることに注意してください。これはどのように可能ですか?
編集: この状況のスタック トレースの 1 つに
リンクします。スタックトレースを見ると、「org.eclipse.jdt.internal.ui.text.JavaReconciler」スレッドでさえ同じ DiskIndex オブジェクトにロックしようとしているように見えるかもしれませんが、オブジェクトのアドレスを見ると、実際には別の DiskIndex オブジェクトであることがわかります。
編集 2: この問題を再現したときに取得した別のスタック トレースへの
別のリンク。両者を比較して共通点を確認するとよいでしょう。
