いくつかの変数 (int と double) にアクセスする 2 つのスレッド t1 と t2 があり、それらを a、b、c と呼びます。t1 は私のクリティカル パス上にあり、高価な比較交換を介してこれらの変数を増減します。
std::atomic<double> a;
std::atomic<double> b;
std::atomic<double> c;
std::atomic<uint32_t> d;
.
.
.
// Extremely-common, critical path thread t1
d++;
while(!a.compare_and_exchange(expectedVal, newVal);
while(!b.compare_and_exchange(expectedVal, newVal);
while(!c.compare_and_exchange(expectedVal, newVal);
t2 はめったに発生しませんが、発生すると、上記の変数が一緒に追加されます。
// Rare thread, t2
return a + b - c;
現時点では、アトミックを使用しています。99.999% の確率で変数が同じスレッドからインクリメントされ、「まれなスレッド」で変数を非アトミックとして宣言できる方法はありますかa + b - c
? " スレッドの書き込みが終了した店舗はありますか?
これにより、まれなスレッドが実行されるまれな状況でのみレイテンシを追加できます。