From MySQL glossary:
READ COMMITTED
When a transaction with this isolation level performs UPDATE ... WHERE or DELETE ... WHERE operations, other transactions might have to wait. The transaction can perform SELECT ... FOR UPDATE, and LOCK IN SHARE MODE operations without making other transactions wait.
Is that correct?
UPDATE sets x-locks to every row it scans and then releases those locks that do not match the WHERE-part. The remaining rows keep x-locks until the transaction ends. As far as I know, exactly same thing happens with SELECT-FOR UPDATE. So how it can be that UPDATE may block other transactions but SELECT-FOR UPDATE does not?