Başka bir uygulamada kötü tasarım tarafından vuruldum: birden çok iş parçacığı EnsureDatabaseSchemaExists()
temelde şuna benzeyen bir yöntemi aynı anda yürütür :
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'MyTable') AND type = N'U') BEGIN
CREATE TABLE MyTable ( ... );
END
Ancak, bir SERIALIZABLE işleminde yürütülse bile, bu kod iş parçacığı için güvenli gibi görünmüyor (yani paralel kod tabloyu birden çok kez oluşturmaya çalışır). SELECT deyimini, başka bir iş parçacığının aynı SELECT deyimini yapmasını engelleyen bir kilit almaya zorlama şansı var mı?
Multi-threaded-EnsureSchemaExists () yöntemleri için daha iyi bir model var mı?