我们正在使用带有 SQL 的 WPF/C# 创建客户端服务器应用程序。在这里,我们生成一个唯一的数字 b 检查 DB(获取最后一个最大数字)并使用该最大值,我们递增“1”并将该值存储在 DB 中。此时另一个用户也在同一屏幕上工作并创建唯一编号,在某些情况下,唯一编号会重复并引发异常。
我们发现这是一个并发问题。
我们正在使用带有 SQL 的 WPF/C# 创建客户端服务器应用程序。在这里,我们生成一个唯一的数字 b 检查 DB(获取最后一个最大数字)并使用该最大值,我们递增“1”并将该值存储在 DB 中。此时另一个用户也在同一屏幕上工作并创建唯一编号,在某些情况下,唯一编号会重复并引发异常。
我们发现这是一个并发问题。
事实上,取出一个数字,加一个数字,并希望它仍然没有被使用是线程竞争和多个客户端之间的竞争——应该避免。
选项:
坦率地说,IDENTITY 列方法是最简单的。
最后,我们使用了带锁的单例模式来解决这个问题。
谢谢。