問題タブ [locks]
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-server - SQL Server にリンクされた Ms Access フォームが応答しない
これに対する明確な答えがあるかどうかはわかりませんが、データ ストアとして SQL Server 2008 を使用する Ms Access アプリケーションを使用しています。すべてのテーブルは Access アプリケーションから SQL Server にリンクされており、アプリケーションは Citrix サーバーでホストされています。アプリケーション内のすべてのフォームはバインドされたフォームです。最近、データを編集または保存しようとすると問題が発生する特定のフォームが 1 つあります。フォームが永久にハングし、セッションを強制終了する必要があります。フォームは SQL サーバー上のテーブルにリンクされており、テーブルには主キーとして Identity 列があります。奇妙なことに、このフォームは他のフォームほど頻繁に使用されておらず、テーブルには他のフォームの半分のレコードさえありません。その他の使用率の高いテーブル。フォームには 4 つのフィールドしかなく、Nvarchar のフィールドは 1 つだけです。他のフォームには、より多くの使用率とデータを備えたより多くの Nvarchar フィールドがあり、問題は発生していないようです。ネットワークの問題はアプリケーション全体に影響を与える可能性があり、1 つのフォームだけでなく、SQL サーバーのインデックスも毎日作成されるため、インデックス作成の問題ではないと考えています。なぜこれが起こるのか誰にも分かりません。
objective-c - @synchronizedvsロック/ロック解除
私はObjective-Cを初めて使用します。いつ使うべきですか@synchronized、いつ使うべきlock/unlockですか?私のバックグラウンドは主にJavaです。Javaでは、明示的なロックを取得すると、より複雑で、広範囲で、柔軟な操作(リリース順序など)を実行できるのに対し、synchronizedキーワードを使用すると、ロックがブロック構造で使用されるようになります。また、取得方法とは逆の順序でリリースする必要があります。同じ理論的根拠がObjective-Cにも当てはまりますか?
multithreading - ロックはどのように実装されますか?
私は次のコードを持っています:
ロック値の読み取りまたは変更は、それ自体がマルチ命令であるため
次のように発生した場合:
では、ロックはシステムにどのように実装されますか? 変数を別の変数の上に置くのは正しくありません。
他のプロセッサのスレッドを停止することも正しくありませんか?
c# - シングルトンを使用していないc#スレッドセーフログの問題
C# でロギング クラスを作成していますが、スレッド セーフにする必要があります。TextWriter.Synchronized とロックを実装しましたが、ロックが機能していないように見える非常に奇妙な問題が発生しています。
シングルトンまたは静的クラスを使用したくありません。これは、このロギング クラスのインスタンスをいつでも複数持つことができるようにしたいためであり、ログのファイル名に基づいてスレッドを同期したいからです。したがって、Log クラスの 3 つの異なるインスタンスを持つ 30 のスレッドがすべて同じログ ファイルを使用している場合、同期は適切に行われ、問題は発生しません。以下は、これまでに思いついたものです。コンストラクターやクローズ/ディスポーズなど、無関係なコードの一部を省略しました。
これをテストするために、同じログ ファイルを指すロガーの 3 つのインスタンスを作成し、30 のスレッドを作成し、各スレッドにロガーの 1 つを (1、2、3、1、2、3 の順序で) 割り当ててから、すべてを実行します。 qを押すまで30スレッド。
これは、ログ ファイルに行ごとに書き込み、書き込みが正しい順序で発生する時間を維持するのに最適ですが、ログ ファイルに記録される内容は次のとおりです。スレッドがログ ファイルの一部を上書きしているようで、異なるスレッドのロガーの異なるインスタンスで発生するようであり、異なるスレッドのロガーの同じインスタンスでは決して発生しないようです。以下のログ ファイルには、エントリが作成された時刻、ロガー ID (1 ベース)、スレッド ID (0 ベース)、およびメッセージ "test" が含まれています。
2 行が破損していることに注意してください。これは、ロックが正しく機能していないか、ロックの誤用が原因であると推測しています。また、キューイングやあらゆる種類のシングルトンを使用しないことをお勧めします。WriteLine 内のロックを m_SyncRoot 変数に変更して非静的にすると、この動作は発生しないようです。なぜそれが機能するのかわかりませんが、私にはそれが私がやりたいことではないようです. また、静的な m_SyncRoot だけをロックしたくありません。ロガーの 3 つのインスタンスが 3 つの異なるログ ファイルを指している場合、それぞれが理由もなく他のログ ファイルをブロックするからです。
私はこれについてとても迷っています、私はこれを完全に台無しにしていますか?
誰かがそれを必要とする場合に備えて、ここにスレッドを生成するためのテストクラスがあります
編集:提案されているように静的 m_ を s_ に変更するように編集し、AutoFlush プロパティを StreamWriter に追加しました。true に設定しても機能しません。
sql - 同じトランザクション内で以前に更新された行で読み取りロックを取得するのを待機しています
読み取りコミット分離レベルのトランザクション内で、一連の行で更新を行い、次に同じ行のセットで選択を行う場合、SQL Server は次の更新を行うときにインデックスで取得した x ロックを再利用しません。選択するか、インデックスで新しいロックのセットを取得しようとします。2 つのプロセスが、ロックされている 2 つのリソースの 1 つであるインデックス キー ロックをめぐって争っているデッドロック シナリオがあります。これは、プロセスの 1 つが既に更新を行ってから、同じ行を選択した場合に発生します。私の質問は、前のステップで同じ行の x ロックを既に取得しているのに、そのプロセスがインデックスのキー ロックを取得するのをどのように待機するのかということです。
macos - mach カーネル、ロックの最適な使用法
Mac OS X ネットワーク カーネル拡張機能の特定の部分を可能な限り高速かつ効率的に設計する方法 (C 言語) に関するアドバイスや指針を探しています。
説明: 2 セットの TAILQ リストがあります。1 つはタイプ A 構造用、もう 1 つはタイプ B 構造用です。ほとんどの場合、私はそれらを別々に扱うので、それぞれに lock_mtx を持っています。場合によっては、A、B、そして両方を同時に変更する必要があります。次のようになります。
私はロックの使い方に慣れていません。1. 単一のロックを使用して両方のリストを保護します。B のみを変更する関数が実行されている間に、A のみを変更する関数が実行されるのを防ぐため、これは無駄です (逆も同様です)。
- 両方のロックを連続して取得し、解放します。それは私に与えるでしょう:
.
これらすべてのロックを取得すると、これは非常に高価になるでしょう。A と B の相互変更を保護するより良い方法はありますか?
アドバイスありがとうございます。
scala - オブジェクトの共有キャッシュへの同時アクセスを持つ Scala アクター、scala.concurrent.Lock、react と receive
さまざまなアクターが同時に同じグラフの一部を作成するソフトを書いています。
グラフのノードはクラス階層によってモデル化され、階層の各具象クラスにはコンパニオン オブジェクトがあります。
ここまでは順調ですね。
作成時にノードで構造ハッシュを実行します。つまり、各コンパニオン オブジェクトには、コンストラクター引数でキー設定されたノード インスタンスを格納する HashTable があります。これは、同じサブノードを持つ特定のノード クラスのインスタンスが既に存在することを検出し、新しいインスタンスを作成する代わりにそのインスタンスを返すために使用されます。これにより、メモリの爆発を回避し、一定の時間を要するノードの等価性テスト (グラフ比較ではなく参照比較) を行うことができます。このマップへのアクセスは、scala.concurrent.Lock を使用して保護されています。
しかし問題は、ロックが jvm スレッド レベルで動作し、アクターがどのようにコーディングされているかによって、アクターが独自の jvm スレッドに割り当てられるか、代わりに同じ JVM スレッド内のいくつかの他のアクターとインターリーブされる可能性があることです。構造ハッシュが機能しなくなります (つまり、構造的に同一のノードがいくつか作成され、そのうちの 1 つだけがキャッシュに格納され、構造的等価性が機能しなくなります)。
まず、この構造的ハッシュ アーキテクチャがアクターの共有なしの哲学に反することはわかっていますが、パフォーマンス上の理由から、このハッシュが機能することが本当に必要です (一定時間の等価性により桁違いの改善が得られます)。 jvmスレッドレベルではなくアクターレベルで動作するアクターとの共有リソースの除外?
ノード コンパニオンをアクターにカプセル化して、ファクトリへのアクセスを完全にシーケンシャル化することを考えましたが、これはすべての既存のコードを完全に書き直すことを意味しますが、他のアイデアはありますか?
ありがとう、
c# - トランザクションとロック
私は現在、トランザクションに取り組んでおり、混乱しています。これらのトランザクションは、データベースのストアド プロシージャではなく、データ アクセス レイヤーで作成されます (SQL Server 2008)。トランザクションに設定された分離レベルの通常の動作を理解しています。次のシナリオで何が起こるべきかを理解できません。
- 取引を開始する
- ID=1 の従業員を選択します。
- ID=1 で従業員を更新します。
- 専念
同じことをしている複数のスレッドがありますが、ID は異なります。しかし、2 つのスレッドで同じ ID を検索する場合があります。それらをスレッド A と B と呼びましょう。上記の手順は、2 つのスレッドに関して次のように進行します。Isolation Level は Repeatable Read に設定されています。
A1. トランザクション A2 を開始します。ID=1 の従業員を選択します。B1. トランザクション B2 を開始します。ID=1 の従業員を選択します。A3. ID=1 で従業員を更新します。A4. B3 をコミットします。ID=1 で従業員を更新します。B4. 専念
このトランザクションから本当に達成したいことは、スレッド A が特定のレコードを選択したときに、スレッド B がそのレコードを選択することさえできないようにすることです。このシナリオでトランザクションとロックを使用することで、正しい軌道に乗っているかどうかはわかりません。
返信待ち:)
c - C でのセマフォ ロック ソリューション
セマフォ同期を実装する次の問題を解決するにはどうすればよいですか...
この問題の目的のために、交差点を上記のようにモデル化し、交差点を四分の一に分割し、その部分を通って交差点に入る車線の各四分の一を識別します。(明確にするために: 道路の右側を運転しています。) ターンは、交差点の 1 つ、2 つ、または 3 つの部分を通る進行によって表されます (簡単にするために、交差点では U ターンが発生しないと仮定します)。 . そのため、車が北から近づいてきた場合、行き先に応じて次のように交差点を進みます。
交差点に最初に到着した人が先に進みます。
2 台の車が同時に交差点の同じ部分にいることはできません。同じようにすれ違うな。2 台の車が同じ方向から近づき、同じ方向に向かっている場合、最初に交差点に到着した車が最初に目的地に到着するはずです。同様に、車は交差点で互いに「飛び越える」べきではありません。たとえば、車が交差点に入って直進しているとします。次に、別の車が同じ方向から交差点に入り、左に進んでいます。2 番目の車は、最初の車の後に交差点を出る必要があります。しかし、車が交差点に入って左に進んでいるとします。別の車が同じ方向から交差点に進入し、右に進んでいる場合、1 台目の車が 2 台目の車の前にあるにもかかわらず、先に交差点を離れることがあります。まだ左折できないかもしれません。各車は、交差点に近づく (approaching)、交差点の 1 つ以上の領域 ((region1)、region2、および region3) に入り、交差点を離れる (exit) ときに、車の番号、進入方向、および目的地を示すメッセージを出力する必要があります。方向。
ある方向から交差点に接近する車は、同じ順序で交差点に進入する必要があります。車が交差点に近づいて速度を落とす前に、同期をとってはならないことに注意してください。言い換えると、交差点の region1 に入る直前に近づいていることを単純に出力しないでください。たとえば、2 つのイベント間に同期プリミティブが必要です。その他の注文要件はありません。たとえば、異なる方向から接近する車の順序要件はありません。一度に 2 台以上の車が交差点にいることを許可し、どの方向からの交通も他の方向からの交通を枯渇させないようにする必要があります。
createcars は 20 台の車を作成し、それぞれにランダムな方向を割り当てる approachintersection に渡します。それらにランダムなターン方向を割り当てる必要があります。アプローチ交差点でもこれを行うことができます。
このソリューションの実装に役立つ場合とそうでない場合があるその他のルーチンは、直進、右折、左折です。使うことも捨てることもできます。
以下は、東から到着して西に向かっている 1 台の車 (8 号車) の出力例です。領域 (例: region1) は、各車に対して相対的に定義されることに注意してください。右に行く車は region1 を出力します。直進する車は、region1 と region2 を出力します。左に行く車は、region1、region2、および region3 を出力します。
以下は、私が持っているルーチンです..
java - ロックの数を増やす最良の方法は何ですか?
この質問は、整数値で同期するとNullPointerException が発生することに基づいており、この質問から派生しています 整数値で同期する
Java でロック数を増やす最善の方法を知りたいと思っていました。ConcurrentHashMapつまり、固定配列に基づいて、キーのハッシュを計算して配列のインデックスを参照することによって実装されている以外はどれですか?
以下、予想です。1 つのオブジェクトが処理中の場合、同じオブジェクトが別のスレッドから呼び出された場合、同じオブジェクトに対してdoMoreThing()行うべきではありません。doAnotherThing()