我正在实施在线法官。用户的提交进入submission
数据库的表中。该表有一个属性status
,最初是Queued
. submission
我的程序连接到数据库并在带有状态的表中查看提交Queued
,如果是,则选择其中一个并将状态转换为Assessing
. 然后将提交编译并针对测试用例运行。然后根据结果将status
属性更改为Accepted
等Wrong Answer
。
我的问题是,如果我在具有相同数据库的两台不同机器上运行我的程序,这两个程序可以给出并发问题。例如,如果我提交,它将有 status= Queued
,现在假设第一个程序先读取它,然后再更改 status=Assessing
,第二个程序也读取提交。现在没有错误,因为正在重新评估相同的提交。
但是在这种情况下仍然Mysql
提供并发,或者我必须自己添加它。如果是,最好的方法是什么?
问问题
4788 次
1 回答
1
可以用读锁来实现。有很好的文档示例http://dev.mysql.com/doc/refman/5.0/en/innodb-locking-reads.html
于 2013-06-24T08:43:45.877 回答