問題タブ [critical-section]
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 - SetEvent はアトミックですか?
クリティカル セクションで保護されていない同じイベント ハンドラーで、2 つ以上のスレッドが Win32 API の SetEvent を呼び出すのは安全ですか?
multithreading - Delphi でスレッド セーフなリスト ラッパーを実装するにはどうすればよいですか?
2 つの Tstringlist と 1 つの TClassList を維持するリスト ラッパーがあります。
次のように、これをスレッドセーフにする必要があります。
- 同時書き込みは許可されていません (何らかの待機状態に入る必要があります)
- 書き込み中の読み取り (またはその逆) は許可されていません (何らかの待機状態に入る必要があります)。
- 同時読み取りが許可されています
どうすればこれを行うことができるかについてのアイデアはありますか? 私の直感では、クリティカル セクション以上のもの、おそらくセマフォまたは「使用カウンター」、おそらくこれらの 1 つとCSが必要であることがわかります。
英語での全体的なアプローチから疑似コード、デルファイの実装、または外部リンクまで、どこから始めればよいのかよくわかりません。
c++ - この小さなミューテックス コードの何が問題になっているのでしょうか?
Entrek Codesnitch ソフトウェアを使用してメモリ リークなどをデバッグおよびテストすると、次のエラーが報告されます。
たぶん、眠れぬ夜のすべてがついに私に届いています。しかし、私はそれが何について不平を言っているのか正確にはわかりません。何か案は?
c++ - EnterCriticalSection の使用に関する問題
複数のスレッドから配列を操作する必要があるため、CRITICAL SECTION を使用してデータへの排他的アクセスを許可します。
ここに私のテンプレートがあります:
コンパイル中に、 and の呼び出しに次のような問題がEnterCriticalSection(&cs)
ありLeaveCriticalSection(&cs)
ます。
何が悪いのかわかりません。見えるかも。いつもこのように使っていて大丈夫だったからです。windows.h
含まれています
c++ - クリティカルセクション-生きるべきか、死ぬべきか?
WinSock2とWinAPI関数を使用してチャットを書いています。そして、私は少し問題があります。
クライアント接続のstd::vectorをサーバーに保存します。新しいクライアントが接続すると、新しいスレッドが開始され、クライアントとのすべての作業がこの新しいスレッドで行われます。私はクラスを使用しないので(あまり良くないことはわかっています)、この接続のリストはグローバル変数として定義されています。
複数のスレッドがこのリストに同時にアクセスしようとする状況になる可能性があるように思われます。問題があることに気づいていませんが、次のようなことをする必要がありますか?
それで、私の状況ではCRITICAL_SECTIONを使用する必要がありますか?私は間違いを見つけなかった幸運な人ですか?
.net - 「クリティカルセクション」「クリティカル領域」「制約付き実行領域」の違い
これらは実際には 3 つの異なる概念ですか、それともごちゃごちゃしていますか? (スレッド化とガベージ コレクションに関する記事を一緒に読んでいて、混乱してしまいました。)
「クリティカル セクション」 - これは、複数のスレッドが同時にアクセスすることを望まないコードのセクション、つまり lock および Monitor.Enter/Exit ステートメント内の用語であると思いますか?
「クリティカル リージョン」 - ここには本当の手がかりはありません - MSDN は、「これは、セクション内でスローされた例外がより広い影響を与える可能性があることをホストに伝えます」という行に沿って何かを言います。そして、「Sql Server などの CLR のホスト」は、重要な領域内でスローされた例外を「異なる方法で」処理することを選択する場合があります。別の方法?なぜ?そして、最も重要なこととして、コードをクリティカル リージョンとしてマークする必要があるのは、実際にはどのようなシナリオでしょうか?
「制約付き実行領域」 - ガベージ コレクションの記事で CriticalFinalizerObject について読んでいるときに、これに出会いました。
これについて MSDN から理解できるのは、これらのリージョンのいずれか内のコードは何らかの形で実行が保証されているため (しかし、どのように?)、「帯域外」の例外をスローしてはならないということだけです。
とは何out-of-band exception
ですか? (これをグーグルで検索しましたが、「範囲外の例外」を意味するかどうか尋ねられました)。
未処理の例外ですか?それとも特定の種類の例外のみですか? 繰り返しになりますが、最も重要なこととして、「制約付き実行領域」が必要になる現実世界のシナリオは何ですか?
概念がよくわからないので、「.NET」以外にこの質問に必要なタグがわかりません。
windows - クリティカル セクションの再初期化を回避する
グローバル クリティカル セクションを作成し、初期化して使用する dll があります。
現在、サードパーティのアプリケーションが dll を複数回使用またはロードしているため、ヒープが破損しています。
--> VERIFIER STOP 00000211: pid 0x1470: クリティカル セクションは既に初期化されています。<--
グローバル フラグを使用して、クリティカル セクション オブジェクトが既に初期化されているかどうかを確認しても役に立ちません。同じことを達成するためのアイデアはありますか?
ありがとう
delphi - Windows Server 2008(sp1)で実行されているDelphiアプリのメモリは再利用されませんか?
Windows Server 2008(x64、sp1)で実行すると、メモリフットプリントが着実に増加するD2007アプリケーションがあります。
Windows Server 2003(x32またはx64)、XPなどで正常に動作し、期待どおりに上下します。
付属のメモリマネージャまたは最新のFastMM44.92で試してみたところ、同じ結果が得られました。
Win2008でDelphiアプリのメモリ使用量を監視しようとした人はいますか?
または何か手がかりがありますか?
精度:
-常識的なメモリリークはありません(もちろん、私はFastMMなどに精通しています)
-メモリ使用量はProcessExplorerで監視されました。Win2008では、仮想メモリ(Private Bytes)と物理メモリ(WorkingSet Private)の両方が増加しています。メモリの
負荷がかかっていても、メモリ消費量は増加し続けていました。(それが失敗を引き起こしたので、私たちが調査するようになった方法ですが、Win2008ボックスでのみ)
更新://**リペース**//コードはアプリよりもはるかに単純ですが、同じ動作を示します。
10,000,000個のオブジェクトと10,000,000個のインターフェイスのリストを作成し、2回実行すると、使用メモリが最大60 MB増加し、Windows Server 2008でさらに100回実行すると、約300 MB増加しますが、XPの場合の状態に戻ります。
複数のインスタンスを起動した場合、他のインスタンスを実行できるようにメモリが解放されません。代わりに、ページファイルが大きくなり、サーバーがクロールします...
アップデート2:QCレポート73347
を参照してください。
さらに調査した後、以下のコードに示すように、クリティカルセクションまで追跡しました。
そのコードをボタン付きの単純なVCLアプリケーションに配置します。そして、ProcessExplorerで監視し
ます。開始は約2.6MBで、5回の実行(ボタンをクリック)後も約118.6MBのままです。
5回の実行で116MBが失われました。
windows-vista - Vista/Win2008 でクリティカル セクションがメモリをリークしていますか?
Vista/Windows Server 2008 でクリティカル セクションをかなり使用すると、OS がメモリを完全に回復しないようです。Delphi アプリケーションでこの問題が見つかりましたが、これは明らかに CS API を使用しているためです。(このSOの質問を参照してください)
他の言語 (C++ など) で開発されたアプリケーションでそれを見た人はいますか?
サンプル コードは、10000000 CS を初期化してから削除するだけでした。これは XP/Win2003 では問題なく動作しますが、Vista/Win2008 ではアプリケーションが終了するまでピーク メモリをすべて解放しません。
CS を使用すればするほど、アプリケーションは無駄にメモリを保持します。
c++ - クリティカルセクションは常に高速ですか?
マルチスレッドアプリケーションをデバッグしていて、の内部構造を見つけましたCRITICAL_SECTION
。CRITICAL_SECTIONのデータメンバーLockSemaphore
が面白いと思いました。
LockSemaphore
自動リセットイベント(名前が示すようにセマフォではない)のように見え、オペレーティングシステムはCritcal Section
、他のスレッドによってロックされているスレッドが最初に待機するときに、このイベントをサイレントに作成します。
さて、クリティカルセクションは常に速いのだろうか?イベントはカーネルオブジェクトであり、各クリティカルセクションオブジェクトはイベントオブジェクトに関連付けられていますCritical Section
。Mutexなどの他のカーネルオブジェクトと比較して、どのように高速化できますか?また、内部イベントオブジェクトは実際にクリティカルセクションのパフォーマンスにどのように影響しますか?
:の構造は次のCRITICAL_SECTION
とおりです。