【问题标题】:Data consistency during multiple threads多线程期间的数据一致性
【发布时间】:2018-04-25 19:24:48
【问题描述】:

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

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

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

【问题讨论】:

    标签: concurrency transactions acid


    【解决方案1】:

    好吧,鉴于我们正在讨论 SQL 数据库,您必须使用具有 serializable 隔离级别的事务。阅读它here

    【讨论】:

    • 根据我从链接中了解到的情况,Serializable 隔离级别对读取的数据设置了读/写锁。如果所有 3 个线程在相同的确切时间访问相同的确切数据(比如说低至纳秒),会发生什么情况。那么它是否必须是应用程序端而不是数据库的某种隔离级别?
    • 您能否指出一些解决事务管理的文档,其中多个事务在确切的时刻开始?我无法想象数据库将如何处理它。它如何跟踪其当前事务以找出它应该如何处理可序列化隔离。
    • 这是“普通”的锁管理;只有一个实体可以拥有写锁。授予写锁也必须序列化,因此“精确即时”不适用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-09
    • 2020-03-28
    相关资源
    最近更新 更多