Herb Sutter はブログで次のように書いています。
[...]スマート ポインター参照カウント のインクリメントは、通常、最適化された実装での通常のインクリメントと同じになるように最適化できる
shared_ptr
ためです。ただし、デクリメントはアトミック デクリメントまたは同等のものである必要があります。これは、それ自体がより高価な特別なプロセッサ メモリ命令を生成し、その上、周囲のコードの最適化にメモリ フェンスの制限を引き起こします。
テキストはの実装に関するものでshared_ptr
あり、彼の発言がこれにのみ当てはまるのか、それとも一般的に当てはまるのかはわかりません。彼の定式化から私が収集したのは、一般的に.
if(counter==0)
しかし、考えてみると、 が直後に続く場合の「より高価な減少」しか思い浮かびません。これはおそらく の場合shared_ptr
です。
したがって、アトミック操作++counter
は (通常)よりも常に高速なのか--counter
、それとも単に?if(--counter==0)...
shared_ptr