Birbirine Bağlı Değişken Erişimi
Uygulamaların birden çok iş parçacığı tarafından paylaşılan değişkenlere erişimi eşitlemesi gerekir. Uygulamalar ayrıca bu değişkenler üzerindeki işlemlerin atomik olarak gerçekleştirildiğinden de emin olmalıdır (tamamen gerçekleştirilir veya hiç gerçekleştirilmez.)
Düzgün hizalanmış 32 bit değişkenlere yönelik basit okuma ve yazma işlemleri atomik işlemlerdir. Başka bir deyişle, değişkenin yalnızca bir bölümü güncelleştirilmiş olmaz; tüm bitler atomik bir şekilde güncelleştirilir. Ancak, erişimin eşitlenmesi garanti değildir. İki iş parçacığı aynı değişkenden okuyor ve yazıyorsa, bir iş parçacığının diğer iş parçacığı yazma işlemini gerçekleştirmeden önce okuma işlemini gerçekleştirip gerçekleştiremeyeceğini belirleyemezsiniz.
Düzgün hizalanmış 64 bit değişkenlere yönelik basit okuma ve yazma işlemleri 64 bit Windows'ta atomiktir. 64 bit değerlere yapılan okuma ve yazma işlemleri 32 bit Windows'ta atomik olarak garanti edilmemektedir. Diğer boyutlardaki değişkenlerin okunması ve yazılması, herhangi bir platformda atomik olması garanti edilmemektedir.
Birbirine Kenetlenmiş API
Birbirine bağlı işlevler, birden çok iş parçacığı tarafından paylaşılan bir değişkene erişimi eşitlemek için basit bir mekanizma sağlar. Ayrıca değişkenler üzerinde atomik bir şekilde işlemler gerçekleştirirler. Değişken paylaşılan bellekteyse, farklı işlemlerin iş parçacıkları bu işlevleri kullanabilir.
InterlockedIncrement ve InterlockedDecrement işlevleri, bir değişkeni artırma veya azaltma adımlarını atomik bir işlemde birleştirir. Bu özellik, sistemin bir iş parçacığının yürütülmesini kesintiye uğratarak başka bir iş parçacığına işlemci süresi dilimleme izni verebildiği çok görevli bir işletim sisteminde kullanışlıdır. Böyle bir eşitleme olmadan, iki iş parçacığı aynı değeri okuyabilir, 1 artırabilir ve yeni değeri 2 yerine toplam 1 artış için depolayabilir. Birbirine bağlı değişken erişim işlevleri bu tür hatalara karşı koruma sağlar.
InterlockedExchange ve InterlockedExchangePointer işlevleri, belirtilen değişkenlerin değerlerini atomik olarak değiştirir. InterlockedExchangeAdd işlevi iki işlemi birleştirir: iki değişkeni bir araya getirir ve sonucu değişkenlerden birinde depolar.
InterlockedCompareExchange, InterlockedCompare64Exchange128ve InterlockedCompareExchangePointer işlevleri iki işlemi birleştirir: iki değeri karşılaştırma ve değişkenlerin birinde üçüncü bir değeri karşılaştırma, karşılaştırma sonucuna göre depolama.
InterlockedAnd, InterlockedOrve InterlockedXor işlevleri sırasıyla AND, OR ve XOR işlemlerini atomik olarak gerçekleştirir.
64 bit bellek değerleri ve adreslerinde birbirine bağlı değişken erişimi gerçekleştirmek için özel olarak tasarlanmış ve 64 bit Windows'ta kullanılmak üzere iyileştirilmiş işlevler vardır. Bu işlevlerin her biri adında "64" içerir; örneğin, InterlockedDecrement64 ve InterlockedCompareExchangeAcquire64.
Birbirine bağlı işlevlerin çoğu tüm Windows platformlarında tam bellek engelleri sağlar. Ayrıca, temel kilitlenmiş değişken erişim işlemlerini belirli işlemciler tarafından desteklenen alma ve bırakma bellek sıralama semantiğiyle birleştiren işlevler de vardır. Bu işlevlerin her biri adlarında "Alma" veya "Yayın" sözcüğünü içerir; örneğin, InterlockedDecrementAcquire ve InterlockedDecrementRelease. Bellek semantiği alma, geçerli iş parçacığı tarafından gerçekleştirilen bellek işleminin diğer bellek işlemleri denenmeden önce görünür olacağını belirtir. Yayın bellek semantiği, geçerli iş parçacığı tarafından gerçekleştirilen bellek işleminin diğer tüm bellek işlemleri tamamlandıktan sonra görünür olacağını belirtir. Bu semantikler, bellek işlemlerinin belirli bir sırada gerçekleştirilmeye zorlanabilmesini sağlar. Korumalı bir bölgeye girerken alma semantiğini kullanın ve bu bölgeden ayrılırken semantiği bırakın.
İlgili konular