Bu makale makine çevirisi ayna makalesidir, orijinal makaleye geçmek için lütfen buraya tıklayın.

Görünüm: 17802|Yanıt: 0

[İletişim] kilit C #

[Bağlantıyı kopyala]
Yayınlandı 21.02.2019 09:43:39 | | |
1. Neden kilitli ve ne kilitli?

İş parçacıkları kullandığımızda, en verimli yol elbette asenkron, yani her iş parçacığı aynı anda, birbirine bağımlı olmadan ve beklemeden çalışıyor. Ancak, farklı iş parçacıklarının belirli bir kaynağa erişmesi gerektiğinde bir senkronizasyon mekanizması gereklidir; yani aynı kaynağı okuyup yazarken, her işlemin etkili ve anında olmasını sağlamak için kaynağı aynı anda yalnızca bir iş parçacığı tarafından çalıştırmamız gerekir, yani operasyonunun atomik olmasını sağlamak için. lock, C#'da lock(objectA){codeB} formatında en yaygın kullanılan senkronizasyon yöntemidir.


lock(objectA){codeB} basit görünse de, aslında üç anlamı vardır ve bu da onu uygun şekilde kullanmak için gereklidir:
1. ObjectA kilitli mi? Olmazsa kilitlerim, aksi takdirde objectA serbest bırakılana kadar beklerim.
2. Kilitlendikten sonra, diğer iş parçacıkları codeB'yi çağıramaz veya codeB çalıştırılırken objectA kullanamaz.
3. CodeB çalıştırıldıktan sonra, release objectA'ya ve codeB'ye diğer iş parçacıkları tarafından erişilebilir.

2. Kilit (bu) ne oldu?

Bir örnek bakalım:

t1 iş parçacığında, LockMe ana fonksiyonda lock(this), yani c1'i çağırır ve ana iş parçacığında lock(c1) çağırıldığında, c1'e erişmeden önce t1'deki lock bloğunun çalıştırılmasını beklemelidir; yani tüm c1 ile ilgili işlemler tamamlanamaz, yani c1 ile ilgili işlemler tamamlanamaz. DoNotLockMe() yürütülmez.





Önceki:C# içinde ArraySegment dizinin bir parçası
Önümüzdeki:Spring Boot'un derinlemesine uygulaması. Chen Shaojian ve SpringBoot hızla bir mikroservis sistemi kurdu +
Feragatname:
Code Farmer Network tarafından yayımlanan tüm yazılım, programlama materyalleri veya makaleler yalnızca öğrenme ve araştırma amaçları içindir; Yukarıdaki içerik ticari veya yasa dışı amaçlarla kullanılamaz, aksi takdirde kullanıcılar tüm sonuçları ödemelidir. Bu sitedeki bilgiler internetten alınmakta olup, telif hakkı anlaşmazlıklarının bu siteyle hiçbir ilgisi yoktur. Yukarıdaki içeriği indirmeden sonraki 24 saat içinde bilgisayarınızdan tamamen silmelisiniz. Programı beğendiyseniz, lütfen orijinal yazılımı destekleyin, kayıt satın alın ve daha iyi orijinal hizmetler alın. Herhangi bir ihlal olursa, lütfen bizimle e-posta yoluyla iletişime geçin.

Mail To:help@itsvse.com