But I don't understand the + Sync bound in the Sync impl, why T needs to be both Send and Sync for Rwlock to be Sync? Could someone please explain why? thanks!
No, that is the reason why there is a T: Send bound on the Sync impl. Sync allows you to share a &RwLock<T> to another thread, acquire the write lock and then move out the T.
The reason why there's a T: Send bound on the Send implementation of RwLock<T> is simply because the RwLock<T> contains a T, so if you send the RwLock<T> to another thread you're also sending the T within it.
Similarly to the T: Send requirement for Sync, you can share a &RwLock<T> between threads and then acquire a read lock in different threads, which is equivalent sharing T between those threads and that requires T: Sync.