|
|
1
12
正如保罗所写:
不,这不安全
,我想为其添加经验证据:创建一个表
然后执行
在我的SQL Server 2008上,一个ID(
编辑:显然,包装
在顶端。然而,这在我的测试中时不时会造成死锁。 编辑:我找到的唯一安全的解决方案 和 不产生死锁(至少在我的测试中)是显式地以独占方式锁定表(这里的默认事务隔离级别足够了)。不过要小心;这个解决方案可能会 杀死 性能:
|
|
|
2
4
read Committed的默认隔离使其不安全,如果其中两个完全并行运行,您将得到一个副本,因为没有应用读锁。 您需要可重复读取或可序列化的隔离级别来确保安全。 |
|
3
2
我认为你的假设是错误的。当您查询VersionNumber表时,您只是在该行上放置了一个读锁。这不会阻止其他用户从同一个表中读取同一行。因此,两个进程可以同时读取VersionNumber表中的同一行,并生成相同的VersionNumber值。 |
|
|
4
0
|
|
|
ron burgundy · 获取-释放语义是否跨线程传递?[副本] 1 年前 |
|
|
H3007 · 并发运行python子进程似乎不是并发的 1 年前 |
|
|
The Oddler · TVar会阻止读取直到更改吗? 2 年前 |
|
|
Wang Tuma · 使用信号量的c++并发问题:按顺序打印 2 年前 |
|
|
Marcel Batista · 在不同线程中更新密钥时的字典线程安全 2 年前 |
|
|
rico · 当volatile关键字真的是必要的? 2 年前 |