ロックステートメントを使用せず、パフォーマンス上の理由から volatile と Interlocked のみを使用して、高性能のスレッドセーフコンポーネントを実装しています。
クラスに、スレッドセーフなインスタンスを含む揮発性の参照型メンバーがあります。このインスタンスは、いくつかの操作に対してのみスレッド セーフであり、別の操作ではスレッド セーフではありません。そのため、およびパフォーマンス上の理由から、元のインスタンスを更新する代わりに新しいインスタンスを作成することを好む場合があり、特にロックステートメントを使用しないため、実際に高速に動作します。
そのため、volatile メンバーはいつでも別のインスタンスに置き換えることができます。volatile キーワードを使用すると、マルチスレッド環境で問題が発生しなくなります。
もちろん、これは非常にうまく機能しますが、唯一の問題は、古いインスタンスのガベージ コレクションです。コンポーネントのパフォーマンスをテストしたところ、リリースされたインスタンスのガベージ コレクションに時間がかかりすぎていることがわかりました。
今、古いインスタンスをリサイクルする方法を探しています。問題は、このインスタンスをまだ使用している別のスレッドが存在する可能性があり、このインスタンスを誰も使用していないことを保証する方法 (ロックなし) が見つからないため、交換時に古いインスタンスを取得してその状態をリセットすることができないことです。もう。
ロックステートメントなしで古いインスタンスを使用するスレッドがないことをどのように保証できますか? (volatile と Interlocked が推奨されます)
ありがとう。