Kodunuz aynı anda birden fazla iş parçacığı çalışan bir süreçteyse, kodu aynı anda çalıştırıyor olabilir. Her çalıştırmanın sonucu tek bir iş parçacığındakiyle aynıysa ve diğer değişkenlerin değerleri beklenildiği gibiyse, iş parçacığı için güvenli olur. Başka bir deyişle, bir sınıf veya program tarafından sağlanan arayüz iş parçacıkları için atomiktir veya birden fazla iş parçacığı arasında geçiş yapmak arayüzün yürütme sonucunda belirsizlik yaratmaz, bu da senkronizasyonu düşünmemize gerek olmadığı anlamına gelir. İş parçacığı güvenliği sorunları hem küresel hem de statik değişkenlerden kaynaklanır. Her iş parçacığı yalnızca küresel değişkenler ve statik değişkenler için okuma işlemleri içeriyorsa, ancak yazma işlemi yoksa, genel olarak bu küresel değişken iş parçacığı için güvenlidir; Birden fazla iş parçacığı aynı anda bir değişken üzerinde okuma ve yazma işlemleri yaparsa, iş parçacığı senkronizasyonu genellikle gereklidir, aksi takdirde iş parçacığı güvenliğini etkileyebilir.
Kilidin amacı, çoklu iş parçacıklı yürütme sırasında eşzamanlı işlemleri önlemektir ve referans tür kilit nesneleri, kilitli alanda aynı anda yalnızca bir iş parçacığına izin verir.
Lock yalnızca bir referans tipi değişkenini, yani bir adresi kilitleyebilir
Kilitli ve kilitsiz koşmanın sonuçları arasında bir fark vardır:
Kilitlendikten sonra: i değeri birer birer azalır, sıçramalar olmaz, tekrarlanan çıkış olmaz, ta ki 0 değerine kadar;
Kilitsiz: i'nin çıkış değeri atlar, kesintisiz azalır ve ayrıca -1 değer çıkışına sahip olabilir;
Sebep: Kilit eklendikten sonra, aynı anda sadece bir iş parçacığı kilitli alanda kodu çalıştırabilir ve her iki iş parçacığı sırayla çalıştırılır, böylece kesinti çıkmaz. |