問題タブ [synclock]

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 投票する
1 に答える
1784 参照

.net - SyncLock を使用して List(of T) へのアクセスを同期する

マルチスレッド アプリケーションで使用される List(of T) を含むクラスがあります。Get、Add、Remove の 3 つのメソッドがあり、List(of T) にアクセスして変更します。オブジェクトを追加または削除するときだけでなく、必要なオブジェクトを照会するときはいつでも、SyncLock を使用して m_List をロックしていました。 ただし、目的のオブジェクトを検索するときとは対照的に、オブジェクトを追加または削除するときに m_List をロックするだけでパフォーマンスが向上するかどうかについて興味がありますか?

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

c# - プロパティで synclock を使用する必要がありますか?

私は読んでいて、プロパティでsynclockを使用する必要があるかどうかについて矛盾する答えを得ています。

インスタンス オブジェクトのスレッド間でプロパティを取得/設定する必要があるマルチスレッド アプリケーションがあります。現在、同期クロックを使用せずに実装されており、これまでのところ問題に気づいていません。一般的な静的メソッドで synclock を使用していますが、インスタンス クラスを適切かつスレッド セーフな方法で実装したいと考えています。

どんなフィードバックでも大歓迎です。

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

vb.net - 書き込み時のSyncLock?読む?または両方?

バイト配列があるとしますPrivate Data as Byte()。この配列はクラス内でプライベートです。このクラスは、への読み取りと書き込みのためのパブリック関数を提供しますData

このクラスには複数のスレッドからアクセスできるので、このクラスからの読み取りと書き込みが同時に行われない状況を避けたいと思います。

今のところ、問題を回避するためにSyncLockを使用しています。書き込み関数だけを入れることはできますかSyncLock Data、それとも読み取り関数に入れる必要がありますか?または両方?

特定のコード例は考えていません。書き込み関数のSyncLockによって書き込みがそもそも排他的にアクセスできるようになる場合、読み取り関数と書き込み関数の両方をロックすることに利点があるかどうかだけが気になります。

0 投票する
4 に答える
6931 参照

vb.net - このコードでは何を SyncLock する必要がありますか?

2 つのメソッドを持つクラスがあります。1 つは多数のスレッドを作成して実行するクラスを呼び出し、もう 1 つはそれらのスレッドが完了したときに発生するイベントを処理する (そして最初のメソッドを再度呼び出す) イベント ハンドラーです。

イベントを処理するメソッドは、イベントを発生させたスレッドで実行されることを理解しています。そのため、SyncLock実行中のスレッド数を示すメンバー変数を作成し、そこから 1 を引きます。

だから私はいくつかの質問があります:

主な質問:クラスのどこでもSyncLockする必要がありますか?_availableThreadsつまり、スレッドを作成するメソッド (スレッドが作成されると 1 が追加されます) で

この質問に関連する副次的な質問:

  1. 通常SyncLockは現在のインスタンスを使用しますが、代わりにタイプのコードを見たことがあるので、同期ロック(現在のインスタンス) とSyncLockの違いは何ですか?MeGetType(Me)

  2. 2つの間にパフォーマンスの違いはありますか?そして、他に影響を与えない上記のためにロックできる小さなものはありますか?おそらく、クラス内のものをロックするという唯一の目的のために作成された別の「南京錠」オブジェクトですか?

注: の唯一の目的は_availableThreads、特定の時間に実行できるスレッド数を制御し、スレッドが実行に数時間かかるジョブを処理することです。

コード:

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

asp.net - synclockを使用したasp.netマルチスレッド

asp.netWebサイトのページをロードするたびに実行するテストコードがあります

これはコードです

「dotrace」は、データベース内のログテーブルにレコードを追加するだけです。

これで正しい結果は、「入力」、「終了」、「終了」の順序でデータベースにエントリを含める必要があるということです。

しかし実際にデータベースを見ると、最初に2つが「入力」、次に2つが「終了」などが表示されます。これは、マルチスレッドが正常に機能していることを意味しますが、同期ロックは正しくありませんか?

どうすればこれを修正できますか?実際のコードはデータベースにレコードを追加し、異なるセッションの複数のページから呼び出される可能性がありますが、同じコードを2回同時に実行してはなりません

私は誰かが助けてくれてありがとう

どうもありがとうございます!!!

編集:

Sashasのすばらしい投稿に応えて、コードをクラスに変更しました(モジュール内にありました)。これで、次のようになります。

今では80〜90%の時間で動作します。ページの読み込み時に私は持っています:

一度に複数のページを開くと、それでも時々衝突します。しかし、私が正しければ、問題はhttpruntime.cacheほど同期ロックでは発生しません。これは、標準プロパティを使用すると、1ページでコードが100%機能するためです。

では、まったく異なるセッションからであっても、2つのスレッドが同時にtrylockを実行しないようにするにはどうすればよいですか?

助けてくれてありがとう

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

asp.net - asp.netグローバル同期ロックオブジェクト

asp.netに、特定のスレッド化されたサブが何があっても同時に2回実行されないようにする方法はありますか?

私が今持っているコードは

このコードをすべてのページで実行すると、コードが数回重複します。コード内のDoTrace関数は、メッセージをテーブルに書き込むだけです。

表内のメッセージは、順番に(入力、終了、終了)何度も表示されるはずですが、実際には表示されません。私は入った、出た、入った、出た、出たようになります...

これは、同期ロックが完了していないことを意味します。本当?

もしそうなら、リクエスト間およびセッション間で、コードのブロックに完全な同期ロックを実装するにはどうすればよいですか?

編集:データベース内のメールタイプのリストによると、実際のコードは電子メールを送信するため、このロックが必要です。各メーリングタイプが送信された後、マークが付けられ、次のメーリングに進みます。処理の途中ではできません。別のスレッドがこのメールを未処理と見なす必要があります。

お知らせ下さい

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

.net - null オブジェクトの SyncLock

nullになる可能性のあるオブジェクトをSyncLockする簡単な方法はありますか?

そして、あなたがそれを求める前に、はい、null 変数に対して SyncLock を実行することは論理的ではないことを知っています。ただし、今のところ、SyncLock を呼び出す前にすべての場所で null チェックを実行する以外に選択肢がないため、コードが簡素化されます。

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

.net - SyncLock は .Net でどのように機能しますか

複数のスレッドで共有されているオブジェクトのリストがありますClear。解決策を探しているときに、リストにアクセスするときに SyncLock を使用する必要があることがわかりました。

lockObjectしかし、ブロック内の重要性は何か、SyncLockたとえばクリア中myList に使用できるかどうかの私の質問

またはlockObjectはmyListとは異なる必要がありますか?

編集:

sysnclock について私が思うのは、「lockObject で指定されたオブジェクトに対してロックが取得されている」ということです。list を lockObject としてクリアするように指定した場合、コンパイラはリストをクリアする前に list への排他的アクセスを取得するべきではありませんか?

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

.net - .NET マルチスレッド Synclock と Monitor

私は自分のサービスとその SQL データベースの間で対話するために書いているマルチ スレッド サービス用に、もう少し効率的な接続プールを構築しています。基本的に要約すると、クラスに次のコードがあります。

したがって、このコードは非常にうまく機能します。異なるスレッドで 500 の select ステートメントをコンピューターが実行できる速さで実行でき、8 つの異なる接続を開きます (おそらくコンピューターの速度が原因で、遅い PC はより多く開く可能性があります)。問題は、DBSelect 関数で、Try/Catch で囲まれた行でモニターの Enter を解放することです。同期クロックを終了すると、オブジェクトのロックがドロップされることがあるため (この場合、行は不要で例外がスローされることがあります)オブジェクトはまだロックされており、その行を実行しなくても永続的にロックされたままになります (この場合、オブジェクトはそれを使用して正常に通過します)。なぜそれを解放するのか、時には解放しないのか、一生わからない. 何か案は?