10

並行コレクションを見てみましたが、ボンネットの下で通常のロックを使用しているようです。このロック構造を使用する .Net フレームワークに良い例はありますか?


私は最初に ConcurrentDictionary を見ました。通常のロックを使用していることがわかりましたが、BlockingCollection クラスは内部メソッドで SpinWait を使用しています。

4

3 に答える 3

5

ほとんどすべてのローロック並行コレクション クラスは、 と の組み合わせを使用する可能性がSpinWaitありYieldます。ただし、注目すべき例外ConcurrentDictionaryの 1 つです。私が見つけたクラスのリストには、次のものが含まれます。

  • ManualResetEventSlim
  • セマフォスリム
  • スピンロック
  • バリア
  • ReaderWriterLockSlim
  • コンカレントキュー
  • 同時スタック
  • ブロッキングコレクション
于 2011-06-28T21:16:26.267 に答える
4

通常のロックとはどういう意味ですか?ある種のlock(object) { ... }構成?

ConcurrentStackはいの場合、たとえば、それはSpinWaitその仕事にを使用しているのを見る必要があります。

于 2011-06-28T12:05:33.800 に答える
2

ConcurrentStack と ConcurrentQueue はロックのないコレクションですが、ConcurrentDictionary と ConcurrentBag はロックを使用しています。BlockingCollections は単なるコンテナであるため、それ自体はコレクションではありません。たとえば、var bc = new BlockingCollection(new ConcurrentStack()); のように、他のスレッドセーフなコレクションをラップする必要があります。

これは、ロックフリー コードでの SpinWait の使用方法に関する入門記事です http://www.emadomara.com/2011/08/spinwait-and-lock-free-code.html

于 2011-08-12T02:41:16.220 に答える