0

将哲学家进餐问题应用于 innodb,以及使用 select 进行更新:

1) 具有 100,000 个分叉的表,由具有单个主键(分叉)的 innodb 表表示

2) 分叉的抓取是一个更新选择,它指定了该表中 2 到 20 个主键的一些随机列表,而“抓取”正是这个随机分叉列表上相对于 100,000 个不同主键的更新选择. 顺便说一下,select 语句中键列表的顺序是随机的。

3) 有超过 5 个思考者,比如说多达 50 个“同时”的交易抓住了相交的分叉

4)思考时间是在步骤2中为主键的行更新其他列。思考时间永远不会太长。

问题:对于innodb,在上述情况下是否可能由于不公平而导致死锁或饥饿?有什么需要注意的吗?(隔离级别读取已提交。)

目的:使用该表和锁定行的主键来表示复杂更新场景的依赖关系,以便在对各种相关表(顺序一致的表)和其中的行进行一系列更新之前,确定一组依赖关系等同于步骤 1 的主键集,然后在事务开始时使用 select for update 锁定这些依赖项。(当然,在选择更新之后,我重新查询依赖项以确保它们没有改变。)

4

1 回答 1

0

我不知道您所说的“不公平”是什么意思,但是是的,可能会出现僵局。示例:两个思考者尝试使用相同的叉子,例如 1 和 2,但顺序相反。所以思想家一“拿”叉子一,思想家二拿叉子二。之后,两者都会“永远”等待第二次分叉......

您可以通过订购前叉的访问权限轻松克服该问题。这样第一个思考者会拿叉子,第二个必须等待第一个思考者完成,一切都很好。

于 2013-02-13T14:47:51.050 回答