我有一个表,用于维护和分配要处理的部分输入(来自大输入表),用于流程的多个实例。该表的组织如下:

BlockInfo Table
---------------
BlockID int primary key
Status  varchar


每个进程都会查询它应该接受的输入块,然后处理该块。

我期望查询如下:

select BlockID
from BlockInfo
order by BlockID
where Status='available'
limit 1


为此,我将要求服务器维护排他的读锁,因为如果将读锁维护为共享,则多个实例可能会获得同一块,这会导致工作重复,这是不希望的。

我可以获得排他的写锁,但实际上没有写任何东西。但是我想知道mysql是否允许独占读锁。

这也将有助于您了解实现此目标的替代方法。

最佳答案

您应该做的是:


获得排他写锁
选择您要处理的行
将其状态更改为“正在处理”(或“可用”以外的状态)
解锁桌子
对行进行所有处理
更新行以将其状态更改回“可用”


然后,这将允许其他进程与此同时在其他行上工作。它使表处于锁定状态仅足够的时间,以防止它们尝试在同一行上工作。

关于mysql - mysql中的独占读锁,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24053018/

10-10 06:38