Aracılığıyla paylaş


İnce Okuyucu/Yazıcı (SRW) Kilitleri

İnce okuyucu/yazıcı (SRW) kilitleri, paylaşılan kaynaklara erişmek için tek bir işlemin iş parçacıklarını etkinleştirir; hız için iyileştirilmiştir ve çok az bellek kaplarlar. İnce okuyucu yazıcı kilitleri işlemler arasında paylaşılamaz.

Okuyucu iş parçacıkları paylaşılan bir kaynaktan veri okurken, yazıcı iş parçacıkları paylaşılan kaynağa veri yazar. Paylaşılan bir kaynağı kullanarak birden çok iş parçacığı okurken ve yazarken, okuyucu iş parçacıkları sürekli olarak çalıştırılıyorsa ancak yazma işlemleri nadirse kritik bölüm veya mutex gibi özel kilitler performans sorununa neden olabilir.

SRW kilitleri, iş parçacıklarının paylaşılan bir kaynağa erişebileceği iki mod sağlar:

  • Paylaşılan modu, paylaşılan kaynaktan eşzamanlı olarak veri okumalarını sağlayan birden çok okuyucu iş parçacığına paylaşılan salt okunur erişim sağlayan. Okuma işlemleri yazma işlemlerini aşarsa, bu eşzamanlılık kritik bölümlere kıyasla performansı ve aktarım hızını artırır.

    Not

    Paylaşılan mod SRW kilitleri özyinelemeli olarak alınmamalıdır, bu durum özel alma ile birleştirildiğinde kilitlenmelere neden olabilir.

  • Özel Kullanım modu, bir kerede bir yazıcı iş parçacığına okuma/yazma erişimi verir. Kilit özel kullanım modunda alındığında, yazıcı kilidi serbest bırakana kadar paylaşılan kaynağa başka hiçbir iş parçacığı erişemez.

    Not

    Özel kullanım modu SRW kilitleri özyinelemeli olarak alınamaz. bir iş parçacığı zaten tuttuğu bir kilidi almaya çalışırsa, bu girişim başarısız olur (TryAcquireSRWLockExclusiveiçin) veya kilitlenme (AcquireSRWLockExclusiveiçin)

Tek bir SRW kilidi her iki modda da edinilebilir; okuyucu iş parçacıkları paylaşılan modda edinebilirken, yazıcı iş parçacıkları bunu özel kullanım modunda alabilir. Sahiplik isteyen iş parçacıklarının sahiplik verileceği sıra konusunda garanti yoktur; SRW kilitleri ne adil ne de FIFO' dır.

SRW kilidi, işaretçinin boyutudur. Bunun avantajı, kilit durumunu güncelleştirmenin hızlı olmasıdır. Dezavantajı, çok az durum bilgisinin depolanabilmesidir, bu nedenle SRW kilitleri paylaşılan modda yanlış özyinelemeli kullanımı algılamaz. Ayrıca, paylaşılan modda SRW kilidine sahip olan bir iş parçacığı, kilidin sahipliğini özel kullanım moduna yükseltemez.

Çağıran bir SRWLOCK yapısı ayırmalı ve InitializeSRWLock çağırarak (yapıyı dinamik olarak başlatmak için) veya sabit SRWLOCK_INIT yapı değişkenine atamalıdır (yapıyı statik olarak başlatmak için).

SRW kilitlerinin özyinelemeli (yeniden girişli) kullanımını bulmak için Uygulama Doğrulayıcı kullanabilirsiniz.

SRW kilit işlevleri aşağıdadır.

SRW lock işlevi Açıklama
AcquireSRWLockExclusive Özel kullanım modunda bir SRW kilidi alır.
AcquireSRWLockShared Paylaşılan modda bir SRW kilidi alır.
InitializeSRWLock Bir SRW kilidi başlatın.
ReleaseSRWLockExclusive Özel kullanım modunda açılmış bir SRW kilidi serbest bırakır.
ReleaseSRWLockShared Paylaşılan modda açılmış bir SRW kilidi serbest bırakır.
SleepConditionVariableSRW Belirtilen koşul değişkeninde uyku moduna alır ve belirtilen kilidi atomik işlem olarak serbest bırakır.
tryAcquireSRWLockExclusive Özel kullanım modunda ince bir okuyucu/yazıcı (SRW) kilidi almaya çalışır. Çağrı başarılı olursa, çağıran iş parçacığı kilidin sahipliğini alır.
tryAcquireSRWLockShared Paylaşılan modda ince bir okuyucu/yazıcı (SRW) kilidi almaya çalışır. Çağrı başarılı olursa, çağıran iş parçacığı kilidin sahipliğini alır.