Windows varsayılan, otomatik, zorunlu dosya kilitleme şeklindedir. UNIX varsayılan olarak manuel, işbirlikçi dosya kilitlemeyi önler Her iki durumda da, varsayılanlar geçersiz kılınabilir, ancak her iki durumda da genellikle değildir.
Birçok eski Windows kodu fopen
, yerel API (işlevler gibi CreateFile
) yerine C / C ++ API'sini (benzeri işlevler ) kullanır. C / C ++ API, zorunlu kilitlemenin nasıl çalışacağını belirlemenize olanak sağlamaz, böylece varsayılan ayarları alırsınız. Varsayılan "paylaşım modu", "çakışan" işlemleri yasaklamaya meyillidir. Yazmak için bir dosya açarsanız, dosyalara hiç yazmamış olsanız bile yazıların çakışacağı varsayılır. Adları için Aynen.
Ve işte daha da kötüye gittiği yer. Okuma veya yazma için açılış dışında, C / C ++ API dosyası ile ne yapmak istediğinizi belirtmek için bir yol sağlar. Dolayısıyla, API herhangi bir yasal işlem gerçekleştireceğinizi varsaymalıdır. Kilitleme zorunlu olduğundan, bir open
o verir Çakışan işlem kodu çelişkili işlemi gerçekleştirmek için tasarlanmıştır ancak sadece başka bir amaç için bir dosya açıyordu asla bile, reddedilecektir.
Bu nedenle, kod C / C ++ API'sini kullanıyorsa veya yerel API'yi bu sorunları özellikle düşünmeden kullanıyorsa, açtıkları her dosya için maksimum olası işlem kümesini önler ve mümkün olan her işlem dışında bir dosyayı açamaz açıldığında sorunsuz olabilir.
Bence, her program kendi paylaşım modlarını ve açık modları akıllıca ve akıllıca ele alan arıza durumlarını seçtiyse, Windows yöntemi UNIX yönteminden çok daha iyi sonuç verir. Bununla birlikte, UNIX yöntemi, kod bu konular hakkında düşünmeye zahmet etmiyorsa daha iyi çalışır. Ne yazık ki, temel C / C ++ API'si Windows dosya API'si üzerinde paylaşım modlarını idare edecek şekilde çakışmıyor ve çakışıyorsa iyi açılıyor. Yani net sonuç biraz dağınık.