並行コレクションを見てみましたが、ボンネットの下で通常のロックを使用しているようです。このロック構造を使用する .Net フレームワークに良い例はありますか?
私は最初に ConcurrentDictionary を見ました。通常のロックを使用していることがわかりましたが、BlockingCollection クラスは内部メソッドで SpinWait を使用しています。
並行コレクションを見てみましたが、ボンネットの下で通常のロックを使用しているようです。このロック構造を使用する .Net フレームワークに良い例はありますか?
私は最初に ConcurrentDictionary を見ました。通常のロックを使用していることがわかりましたが、BlockingCollection クラスは内部メソッドで SpinWait を使用しています。
ほとんどすべてのローロック並行コレクション クラスは、 と の組み合わせを使用する可能性がSpinWait
ありYield
ます。ただし、注目すべき例外ConcurrentDictionary
の 1 つです。私が見つけたクラスのリストには、次のものが含まれます。
通常のロックとはどういう意味ですか?ある種のlock(object) { ... }
構成?
ConcurrentStack
はいの場合、たとえば、それはSpinWait
その仕事にを使用しているのを見る必要があります。
ConcurrentStack と ConcurrentQueue はロックのないコレクションですが、ConcurrentDictionary と ConcurrentBag はロックを使用しています。BlockingCollections は単なるコンテナであるため、それ自体はコレクションではありません。たとえば、var bc = new BlockingCollection(new ConcurrentStack()); のように、他のスレッドセーフなコレクションをラップする必要があります。
これは、ロックフリー コードでの SpinWait の使用方法に関する入門記事です http://www.emadomara.com/2011/08/spinwait-and-lock-free-code.html