gpt4 book ai didi

ruby-on-rails - Rails `with_lock` 会阻止读取吗?

转载 作者:行者123 更新时间:2023-11-29 11:16:52 26 4
gpt4 key购买 nike

假设我有一个文章,我想对其进行一些更改。

如果我使用 with_lock,它会阻止其他进程读取 Articles 表中的该行吗?

例如

 @article = Article.find(1)
Article.with_lock
#do something
end

# In another process
@article = Article.find(1) # will this lookup be blocked by the first process?

最佳答案

根据 the documentation ,它默认执行 SELECT ... FOR UPDATE

一行上的 SELECT ... FOR UPDATE 不会阻止其他 session 读取该行。它只会阻止其他 session 获取该行的 FOR UPDATE(写)或 FOR SHARE(读)锁。对于执行 SELECT 且没有任何 FOR UPDATEFOR SHARE 子句的 session ,该行通常保持可读。

所以在这种情况下,您需要找到该行,然后在它上面做一个lock('FOR SHARE'),如果您想确保没有人否则有一个 FOR UPDATE 锁。

有关详细信息,请参阅 the PostgreSQL documentation on explicit locking .

关于ruby-on-rails - Rails `with_lock` 会阻止读取吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25984858/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com