Dipende un po' da come uno vuole muoversi, ovviamente ogni metodo ha dei pro e dei contro.
Facendo una lock sulla tabella si ha un accesso serializzato, quindi si mettono in coda tutti gli utenti e vengono serviti uno alla volta, se ce ne sono molti si rischiano lunghe attese o anche dei timeout del browser.
Facendo una lock sulle tuple invece vengono accodati solo gli utenti che chiedono uno o più prodotti che già sono in elaborazione da un altro utente, gli altri proseguono senza attese.
Ad ogni modo anche la SELECT FOR UPDATE si può inserire in una transazione, quindi il rollback lo si può lasciar eseguire a MySQL.