The System.Threading.Interlocked
object allows for Addition (subtraction) and comparison as an atomic operation. It seems that a CompareExchange that just doesn't do equality but also GreaterThan/LessThan as an atomic comparison would be quite valuable.
Would a hypothetical Interlocked.GreaterThan
a feature of the IL or is it a CPU-level feature? Both?
Lacking any other option, is it possible to create such a feature in C++ or direct IL code and expose that functionality to C#?
You can build other atomic operations out of InterlockedCompareExchange
.
public static bool InterlockedExchangeIfGreaterThan(ref int location, int comparison, int newValue) { int initialValue; do { initialValue = location; if (initialValue >= comparison) return false; } while (System.Threading.Interlocked.CompareExchange(ref location, newValue, initialValue) != initialValue); return true; }
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With