NightOwl888 commented on issue #1063:
URL: https://github.com/apache/lucenenet/issues/1063#issuecomment-2526300931
Actually, no, that would not work. `Interlocked` operations require a stable
memory location to work on unless we use unsafe code or pinning, which
introduces complexity and potential risks.
Per ChatGPT:
## Structs and Atomic Operations
If you make your type a struct, using `Interlocked` to manipulate its
internal `Value` field directly would not work as intended for the following
reasons:
1. Copy Semantics:
- Structs are value types, so when you access or modify them, you
typically operate on a **copy**. This would break thread safety and atomicity
because each thread could be working with independent copies of the struct.
2. Interlocked Requires References:
- The `Interlocked` class operates on references to shared memory
locations. For example, `Interlocked.Exchange` and
`Interlocked.CompareExchange` require a `ref` to the field being modified.
Structs cannot provide such a reference to a field within themselves.
3. Struct Field Pinning:
- Even with unsafe code, it is challenging to guarantee safe and correct
atomic operations on a field of a struct because the struct might be moved or
copied by the runtime, breaking assumptions about its memory location.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]