A read memory barrier forces reads before it to finish before reads after it. This is useful, for example, with memory mapped I/O, where a read from memory is actually a read from some device connected to the system.
MMIO reads need to be performed in program order because they might have side effects on the device you are reading from. For example, if the device is streaming data, reading the value could cause the device to replace it with a new value. It could also cause an action which may trigger a change at a different MMIO location. Therefore, reads to these two locations must be ordered, since the results depend on the order they are performed.