idi*_*ous 2 postgresql concurrency multithreading thread-safety select-for-update
我很好地理解当使用 SELECT FOR UPDATE 并发生另一个 SELECT/UPDATE 时,行的更新会发生什么。但是,当使用 SELECT FOR UPDATE 发出两个请求时会发生什么。
例如:
我不关心一旦请求返回并且更新表的时间到来时会发生什么。用于更新的第二个将抛出或更新该行上的最后一个可能的数据。
但是实际的HTTP请求会由他们两个来完成吗?换句话说,在这种情况下 SELECT FOR UPDATE 是否可以被使用(滥用)作为线程同步机制?
你正在混淆图层。PostgreSQL 不支持 HTTP。SELECT ... FOR UPDATE
与HTTP无关。
它的工作原理如下:
BEGIN
BEGIN
SELECT ... FOR UPDATE
并获取一行或多行SELECT ... FOR UPDATE
并匹配相同的行之一,因此它会阻塞,不返回任何内容,直到...COMMIT
或ROLLBACK
SELECT ... FOR UPDATE
换句话说,锁定持续时间是由事务边界控制的。事务边界位于何处取决于您的应用程序和框架,以及您尚未以任何方式识别的数据库层之上的内容。
(另外,这与线程无关)。