With a SyncLock block, execution cannot enter if another thread is currently within a SyncLock block that locks on the same object. With a ReaderWriterLock you don't have to specify an item to lock on because the ReaderWriterLock IS an object.
When your code reaches a call to AcquireWriterLock the ReaderWriterLock will check whether:
1. another thread has called AcquireWriterLock and not called ReleaseWriterLock; or
2. one or more other threads have called AcquireReaderLock and not called ReleaseReaderLock.
If either of those conditions is True then AcquireWriterLock will block, i.e. not return, until all the required ReleaseWriterLock or ReleaseReaderLock methods have been called. In short, a thread cannot acquire a lock to write if any other thread is currently writing or reading.
When your code reaches a call to AcquireReaderLock the ReaderReaderLock will check whether another thread has called AcquireWriterLock and not called ReleaseWriterLock. If that condition is True then AcquireReaderLock will block, i.e. not return, until the required ReleaseWriterLock method has been called. In short, a thread cannot acquire a lock to read if any other thread is currently writing, but it can if one or more other threads are reading.
Basically, the ReaderWriterLock class doesn't care what you put between calls to its Acquire and Release methods. It's up to you to use those methods sensibly and only put reading code between calls to AcquireReaderLock and ReleaseReaderLock and to put all your writing code between calls to AcquireWriterLock and ReleaseWriterLock.
The bottom line is that the ReaderWriterLock will only issue one writer lock at a time and then only if there are not currently any reader locks in effect, while it will issue as many reader locks as you like as long as there is currently no writer lock in effect. As such, multiple simultaneous reader threads are allowed but only a single writer thread is allowed with no simultaneous reader threads.