Я хорошо понимаю, что происходит с обновлением строки, когда используется SELECT FOR UPDATE и выполняется другой SELECT/UPDATE. Но что происходит, когда выполняются два запроса с помощью SELECT FOR UPDATE.
Например:
- Поток A запускает транзакцию, выполняет SELECT FOR UPDATE для строки, получает некоторую информацию и начинает HTTP-запрос, который требует времени. После возврата вызова транзакция фиксируется, а сеанс закрывается.
- Поток B, пока A ожидает запроса, запускает новую транзакцию и выполняет SELECT FOR UPDATE для той же строки. Будет ли он извлекать информацию и выполнять HTTP-запрос или будет ждать, пока поток A зафиксирует/выполнит обновление, а затем извлечет данные из строки.
Меня не волнует, что будет после того, как запрос вернется и придет время обновить таблицу. Второй, который идет на обновление, либо выбросит, либо обновит последние возможные данные в строке.
Но будет ли фактический HTTP-запрос выполняться ими обоими? Другими словами, может ли в этом сценарии SELECT FOR UPDATE использоваться (злоупотреблять) в качестве механизма синхронизации потоков?