锁定池中的资源,同时允许其他人从资源池中订购其他资源

问题描述

|| 我正在建立一个网站来订购资源。我有一个资源池(例如10个资源),当用户要订购资源时,我检查哪个资源是免费的并将其分配给用户。 我正在使用MysqL innoDB表并使用
update ResourceTable SET SOMEFIELD=\'1\'
但是如果第一笔交易尚未完成,而现在另一位用户正在搜索(使用
select * FROM ResourceTable WHERE SOMEFIELD!=\'1\' LOCK IN SHARE MODE
用户正在等待第一笔交易完成(尽管还有其他免费资源)。 如果删除
LOCK IN SHARE MODE
,我将获得应该被锁定的资源。 如何允许多个用户无需等待即可订购资源? (尽管我以某种方式选择了未锁定的行-> MysqL中不存在)     

解决方法

        解决方法可能是在更改SOMEFIELD的值之前锁定整个表。更新此值是一项非常快速的操作,因此,即使您站点的几个传入请求都需要几乎同时访问资源池,并且一个请求正在更改SOMEFIELD,其他请求仅需等待一个请求的一小部分即可。秒,以释放桌子上的锁。