Both latches and mutexes are memory structures designed to provide serialized access to a common resource.
Here's a terrible metaphor, but it does explain the concept :-)
Why do we have a (real physical) latch on the door of a toilet ? It's to avoid an embarrassing situation of someone walking in on someone else.
It doesnt really matter if the person who was in there was doing nothing (eg a 'read') or actually making use of the facilities (eg a 'write') - in either case, they want some assurances that no-one is going to burst in on them.
So they use a latch.
Same with Oracle - I might only be reading memory, but I need to protect what I'm reading because someone might "burst in" and want to change that memory whilst I'm reading it.
A (oracle) latch is typically a structure of a couple of hundred bytes which can be set atomically, so itself does not need to be protected. A single latch might protect several memory structures. Mutexes are similar but a typically a smaller, less complicated structures - which means they can be faster, and you can have more of them, which in turn should give more granular access to structures, thus yielding more concurrency.
Probably the most common latching/mutex issues seen in databases are around the shared pool and library cache, and the most common cause of that is parsing, or excessive call frequency (eg calling a plsql function tightly in a loop).
If you want to know internals, Tanel has a nice set of slides on it
http://blog.tanelpoder.com/files/Oracle_Latch_And_Mutex_Contention_Troubleshooting.pdf