다른 응용 프로그램에서 나는 나쁜 디자인에 감동했습니다 : 여러 스레드가 EnsureDatabaseSchemaExists()
동시에 메소드를 실행합니다. 기본적으로 다음과 같습니다.
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'MyTable') AND type = N'U') BEGIN
CREATE TABLE MyTable ( ... );
END
그러나 SERIALIZABLE 트랜잭션에서 실행 되더라도이 코드는 스레드 안전하지 않은 것 같습니다 (예 : 병렬 코드는 테이블을 여러 번 작성하려고 시도 함). 다른 스레드가 동일한 SELECT 문을 수행하지 못하게하는 SELECT 문을 강제로 잠금을 획득 할 수있는 기회가 있습니까?
멀티 스레드 EnsureSchemaExists () 메소드에 더 좋은 패턴이 있습니까?