एक अन्य अनुप्रयोग में मैं खराब डिजाइन से मारा गया था: कई धागे 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-statement को लॉक करने के लिए बाध्य करने का कोई मौका है जो किसी अन्य थ्रेड को वही SELECT स्टेटमेंट करने से रोकता है?
क्या बहु-थ्रेडेड-एंसुरेस्केमिस्ट्स () विधियों के लिए एक बेहतर पैटर्न है?