rspec/rules/S2551/why-dotnet.adoc
2023-06-08 15:36:00 +02:00

9 lines
1.2 KiB
Plaintext

== Why is this an issue?
A shared resource refers to a resource or data that can be accessed or modified by multiple https://en.wikipedia.org/wiki/Thread_(computing)[threads] or concurrent parts of a program. It could be any piece of data, object, file, database connection, or system resource that needs to be accessed or manipulated by multiple parts of a program concurrently.
Shared resources should not be used for https://en.wikipedia.org/wiki/Lock_(computer_science)[locking] as it increases the chance of https://en.wikipedia.org/wiki/Deadlock[deadlocks]. Any other thread could acquire (or attempt to acquire) the same lock while doing some operation, without knowing that the resource is meant to be used for locking purposes.
One case of this is strings, which are https://en.wikipedia.org/wiki/Interning_(computer_science)[interned] by the runtime. This means that each string instance is immutable and stored, and then is reused everywhere it is referenced.
Instead, a dedicated private `object` instance should be used for each shared resource. Making the lock-specific object `private` guarantees that the access to it is as minimal as possible, in order to avoid deadlocks or lock contention.