Start here. This is the direct spoken answer to practice first.
Why this question matters
A reader/writer lock sounds ideal for every read-heavy cache, but its bookkeeping and more complex acquisition rules can cost more than the protected work. The decision needs a workload, not only a read/write ratio.
ReaderWriterLockSlim allows multiple readers at the same time while still giving writers exclusive access. I would consider it when reads are frequent, read sections are meaningful, writes are uncommon, and a normal lock shows measurable contention. I would keep using lock for small critical sections because it is simpler and often faster at low contention. I would not hold a reader/writer lock across asynchronous I/O because it is a synchronous thread-based primitive.