問題タブ [thread-safety]
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.
c++ - このマルチスレッド ユース ケースに最適なデータ構造: 侵入型リストは適切か?
次の操作をサポートするデータ構造を設計する必要があります。
- 間隔であるキーに基づいてデータ構造内の要素を検索します。たとえば、間隔 1 ~ 5 の値は 3、6 ~ 11 の値は 5 などです。間隔は連続しており、それらの間に重複はありません。
- 前の間隔と次の間隔を検索 - これは、間隔を検索するのとほぼ同じ頻度で行われます。
- 間隔を分割する、連続する間隔を結合する
- 並行性: 設計を 1 つのライター スレッドと他のリーダー スレッドに制限し、次のようにしました。書き込みスレッドは、間隔を分割または結合したり、間隔の値を変更したりできます。任意のリーダー スレッドは、1 つの間隔内でのみ値を読み取ります (リーダーは複数の間隔で読み取ることができますが、すべての読み取りをシリアル化する必要はありません。2 つの読み取りの間に書き込みを行ってもかまいません)。各リーダーによる書き込みごとに約 20 ~ 80 回の読み取りがあります。さらに、読者の数を決定する必要がありますが、それは約 2 ~ 8 です。
途中で要素を追加および削除するためにリストを使用することを検討します。間隔の数は限られているため、おそらく map を使用するのは適切ではありません。この種のアクセス (1 つのライター、複数のリーダー) は、STL リストでは十分にサポートされていません。boost::intrusive::list が適切なようです。侵入リストに加えて、間隔を読み書きするためにロックを取得する必要があります。
また、侵入型リストは、STL リストよりも (含まれるオブジェクトの適切なメモリ割り当てと共に) キャッシュの局所性を向上させるために使用できることを理解しています。
アプローチは大丈夫ですか?はいの場合、特にマルチスレッド アプリケーションで intrusive::list を使用した経験についても知りたいです。
c++ - いくつのCRITICAL_SECTIONを作成できますか?
初期化して使用できるクリティカルセクションの数に制限はありますか?
私のアプリは、スレッドセーフである必要がある多数の(数千の)オブジェクトを作成します。それぞれにクリティカルセクションがある場合、それはあまりにも多くのリソースを消費しますか?
自分のCRITICAL_SECTIONオブジェクトを宣言する必要があるので、Win32 MutexやEventのようにカーネルリソースを浪費しないと思いましたか?しかし、私はしつこい疑問を持っています...?
正直なところ、これらのオブジェクトのすべてが私のアプリケーションでスレッドセーフである必要はないかもしれませんが、クリティカルセクションはライブラリの低レベルの基本クラスにあり、数千のオブジェクトが必要です。
このライブラリを変更する機会があるかもしれないので、オブジェクトが別のスレッドから使用されていることを検出した場合にのみ、クリティカルセクションを遅延作成(およびそれ以降使用)する方法があるかどうか疑問に思いました。で作成されましたか?それとも、これはWindowsが私のために行うことですか?
thread-safety - 非整列データの連動操作
win32 の連動関数は、データに対するアトミック操作のメカニズムを提供します。それらは、スレッドセーフでマルチプロセッサセーフであると想定されています。
データが整列されていない場合はどうなりますか? 連動操作はまだアトミックですか?例: アラインされていない整数のインクリメント。
タイ
.net - XElement を SiteMap として共有
サイト マップとして静的 XElement を使用するカスタム CMS があります。マップが更新されると、ライター スレッドを同期しますが、リーダーとは何もせず、必要なときに XElement を取得できるようにするだけです。
テストでは、リーダー スレッドから XElement を列挙しているときに、別の書き込みスレッドで XElement を更新すると、例外が発生すると考えました。そうではありませんでした。このアプローチに大きな問題があるかどうか、誰かが私に説明できるかどうか疑問に思っています。安全であるとは思えませんが、これまでのすべてのテストで安全であることが示されています.
c# - C# は '??' です。オペレータースレッドセーフ?
これがスレッドセーフでないことは誰もが知っています。
これはどうですか?
c# - .NET暗号化クラスのスレッドセーフ?
.NETアプリケーションの暗号化をカプセル化する静的ユーティリティクラスを作成するという高レベルの目標があります。内部では、不要なオブジェクトの作成を最小限に抑えたいと思います。
私の質問は、.NETFramework内で対称暗号化を実装するクラスのスレッドセーフとは何ですか? 具体的System.Security.Cryptography.RijndaelManaged
には、ICryptoTransform
それが生成するタイプ。
たとえば、私のクラスコンストラクターでは、次の行に沿って簡単に何かを実行できますか?
このクラス内にキーとIVが存在することは安全であるという問題を回避します。このブロック例では、他の多くの質問が発生します。
EncryptorTransformとDecryptorTransformを繰り返し再利用できますか?およびプロパティは「はい」を意味
*.CanReuseTransform
し*.CanTransformMultipleBlocks
ますが、注意すべき注意事項はありますか?RijndaelManaged
実装しているので、特に外部OSレベルのライブラリに関連付けられているためIDisposable
、ブロック内に配置する傾向があります。オブジェクトをusing
保持しているので、これに関する注意点はありますか?ICryptoTransform
潜在的に最も重要な質問は、高度にマルチスレッド化された環境で、
ICryptoTransform
スレッド間でオブジェクトを共有する際に問題が発生するでしょうか?ICryptoTransform
#3の答えがスレッドセーフではないということである場合、オブジェクトを使用している間、ロックによってパフォーマンスが大幅に低下しますか?(私が推測する負荷に依存します。)RijndaelManaged
毎回新しいものを単純にインスタンス化する方がパフォーマンスが高いでしょうか?または、1つを保存して、毎回RijndaelManaged
生成しますか?new RijndaelManaged().CreateEncryptor(...)
私は、これらが内部でどのように機能するかを知っているか、同様の実装の問題を経験している人がいることを望んでいます。これらの種類のパフォーマンスとスレッド関連の問題の多くは、通常、かなりの量の負荷がかかるまで現れないことがわかりました。
ありがとう!
scala - Scala アクターのプロパティを @volatile とマークする必要がありますか?
Scala では、次のような単純なクラスがあるとします。
フィールドsum
にマークを付ける必要があり@volatile
ますか? アクターは論理的にシングルスレッド(つまり、メッセージが順次処理される) ですが、個々の反応は別々のスレッドで発生する可能性があるため、state
変数が 1 つのスレッドで変更され、別のスレッドから読み取られる可能性があります。
c# - C#: スレッドセーフなイベント
以下の実装はスレッドセーフですか? そうでない場合、何が欠けていますか?volatile
キーワードをどこかに置く必要がありますか?または、OnProcessingCompleted
メソッドのどこかにロックがありますか? もしそうなら、どこですか?
注:私がプライベートイベントと明示的なインターフェースのものを持っている理由は、それが抽象基本クラスだからです。そして、それを継承するクラスは、そのイベントを直接処理するべきではありません。より明確になるようにクラスラッパーを追加しました =)
jpa - メソッドの JPA フェッチ タイプを変更する方法はありますか?
エンティティ オブジェクトを編集せずに単一のメソッドで JPA フェッチ タイプを変更する方法はありますか?
JPAエンティティクラスで構成される共有ORMレイヤーがあります。この ORM レイヤーは、2 つの DAO レイヤーからアクセスされます。1 つの DAO には、私の Web アプリケーションの場合と同様に遅延フェッチが必要です。もう 1 つの DAO には、スレッドセーフにする必要があるため、熱心なフェッチが必要です。
以下は、私のスレッドセーフ DAO のメソッドの例です。
このメソッド (またはクラス全体) で熱心なフェッチを使用するにはどうすればよいですか?
c++ - ミューテックスなしのスレッドセーフな静的変数?
メソッド内で宣言された静的変数はスレッドセーフではないことを読んだことを覚えています。(Todd Gardnerが述べたように、Meyerのシングルトンはどうですか?を参照してください)
私のライブラリは、エンドユーザーがアプリケーションの一部としてコンパイルするためのC++コードを生成します。生成されるコードは、スレッドセーフなクロスプラットフォーム方式で静的変数を初期化する必要があります。変数の初期化をミューテックスするために使用したいboost::call_once
のですが、エンドユーザーはBoostの依存関係にさらされています。
エンドユーザーに余分な依存関係を強いることなくこれを行う方法はありますか?