我将获得一个由 SQL Server 数据库在运行时分配的 GUID 列表。
我的直接想法是为 GUID 创建一个表。当一批 GUID 被订购时,它们将被插入到表中。
然后,在运行时,将调用 SPROC 从表中选择 GUID。我可以检索下一个 GUID 并立即将其从表中删除,或者检索下一个 GUID 并更新另一列以声明其已使用。
但这让我想知道同时对数据库进行两次调用以获取 GUID 的竞争条件的可能性。在我看来,如果时间完全不方便的话,可以为这两个调用检索相同的 GUID。
Q1:我对这种潜在竞争状况的担忧是否正确?即它会发生吗?
Q2:有没有办法避免这种情况(例如设置一个 SPROC 以在每次调用时阻塞?)
我能想到的一种至少可以使竞争条件失败的方法是设置另一个进行 GUID 分配的表,并将 GUID 列设置为唯一。然后,在运行时过程中,当检索到 GUID 时,它将通过 GUID 分配表分配给产品。如果为两个产品颁发了相同的 GUID,那么当需要分配它们时,其中一个产品将无法分配并被拒绝。