Concurrency 多线程期间的数据一致性

Concurrency 多线程期间的数据一致性,concurrency,transactions,acid,Concurrency,Transactions,Acid,假设一个应用程序有3个线程,T1、T2和T3,所有线程都在同一时间启动。它们都从某个表、行和列中读取相同的值。假设这个值是50 1.T1很快。在100毫秒内完成。完成后,它将用+5更新读取的值。因此,它在数据库中写入55 2.T2稍微慢一点。在700毫秒内完成。完成后,它会将读取的值加上+10。因此,它用60更新数据 3.T3甚至更慢,在1300ms内完成。完成后,此线程将增加+15。因此,该值变为65 我希望从中学习的解决方案是如何处理这种情况下的数据一致性。因为,很明显,在T3结束时,该值应

假设一个应用程序有3个线程,T1、T2和T3,所有线程都在同一时间启动。它们都从某个表、行和列中读取相同的值。假设这个值是50
1.T1很快。在100毫秒内完成。完成后,它将用+5更新读取的值。因此,它在数据库中写入55
2.T2稍微慢一点。在700毫秒内完成。完成后,它会将读取的值加上+10。因此,它用60更新数据
3.T3甚至更慢,在1300ms内完成。完成后,此线程将增加+15。因此,该值变为65

我希望从中学习的解决方案是如何处理这种情况下的数据一致性。因为,很明显,在T3结束时,该值应80(50+5 T1+10 T2+15 T3),而不是65


如果需要的话,请告诉我是否可以更清楚地回答我的问题。

好吧,既然我们讨论的是SQL数据库,那么您必须使用具有可序列化隔离级别的事务。阅读相关内容。

根据我从链接中了解的情况,可序列化隔离级别对读取的数据设置读/写锁。如果所有3个线程都在同一个精确时间访问相同的精确数据(比如说低至纳秒),会发生什么情况。那么,它是否必须是应用程序端的某种排序隔离级别,而不是数据库?您能给我指出一些处理事务管理的文档吗?我无法想象DB会如何处理这个问题。它如何跟踪当前事务,以确定如何处理可序列化隔离;只有一个实体可以拥有写锁。授予写锁也必须序列化,因此“精确的即时”不适用。