Reputation: 7385
Should I use static fields and interlocked together, in cases when i need to provide thread safety and atomic operations with static fields, Is static fields are atomic by default? For example:
Interlocked.Increment(ref Factory.DefectivePartsCount);
Thanks.
Upvotes: 4
Views: 1460
Reputation: 62439
static
doesn't guarantee anything in terms of thread-safety. Hence, an increment will still not be atomic even if the variable is static
. As such, you will still need to use classic synchronization mechanisms depending on the situation. In your case Interlocked.Increment
is fine.
Upvotes: 1
Reputation: 273244
Yes.
The field (assuming Int32) is atomic, not because it's static but because it's 32 bits.
How ever, Factory.DefectivePartsCount += 1
requires a read and a write action on the variable so the whole operation is not thread-safe.
Upvotes: 5