Aracılığıyla paylaş


Mutex Nesneleri

mutex nesnesi, durumu herhangi bir iş parçacığına ait olmadığında ve sahip olduğunda işaretsiz olduğunda işaretlenmek üzere ayarlanmış bir eşitleme nesnesidir. Aynı anda yalnızca bir iş parçacığı, adı paylaşılan bir kaynağa karşılıklı olarak dışlanan erişimi koordine etmede yararlı olduğu gerçeğinden gelen bir mutex nesnesine sahip olabilir. Örneğin, iki iş parçacığının paylaşılan belleğe aynı anda yazılmasını önlemek için, her iş parçacığı belleğe erişen kodu yürütmeden önce bir mutex nesnesinin sahipliğini bekler. Paylaşılan belleğe yazdıktan sonra iş parçacığı mutex nesnesini serbest bırakır.

İş parçacığı, bir mutex nesnesi oluşturmak için CreateMutexveya CreateMutexEx işlevinikullanır. Oluşturma iş parçacığı mutex nesnesinin hemen sahipliğini isteyebilir ve ayrıca mutex nesnesi için bir ad belirtebilir. Ayrıca adlandırılmamış bir mutex de oluşturabilir. Mutex, olay, semafor ve zamanlayıcı nesnelerinin adları hakkında ek bilgi için bkz. İşlemler Arası Eşitleme.

Diğer işlemlerdeki iş parçacıkları, OpenMutex işlevine yapılan çağrıda adını belirterek mevcut adlandırılmış mutex nesnesinin tanıtıcısını açabilir. Tanıtıcıyı adlandırılmamış bir mutex'e başka bir işleme geçirmek için DuplicateHandle işlevini veya üst-alt tanıtıcı devralmayı kullanın.

Bir mutex nesnesine tanıtıcısı olan herhangi bir iş parçacığı, mutex nesnesinin sahipliğini istemek için bekleme işlevlerinden birini kullanabilir. Mutex nesnesi başka bir iş parçacığına aitse, sahip olan iş parçacığı ReleaseMutex işlevini kullanarak mutex nesnesini serbest bırakana kadar bekleme işlevi istekte bulunan iş parçacığını engeller. Wait işlevinin dönüş değeri, işlevin sinyale ayarlı olan mutex durumu dışında bir nedenle döndürülip döndürülmediğini gösterir.

Bir mutex üzerinde birden fazla iş parçacığı bekliyorsa, bekleyen bir iş parçacığı seçilir. İlk gelen ilk çıkar (FIFO) siparişi varsaymayın. Çekirdek modu APC'leri gibi dış olaylar bekleme sırasını değiştirebilir.

Bir iş parçacığı bir mutex'in sahipliğini aldıktan sonra, yürütmesini engellemeden bekleme işlevlerine yapılan yinelenen çağrılarda aynı mutex'i belirtebilir. Bu, zaten sahip olduğu bir mutex beklerken bir iş parçacığının kendisini kilitlenmesini önler. Bu koşullar altında sahipliğini serbest bırakmak için, iş parçacığının ReleaseMutex her seferinde mutex'in bekleme işlevinin koşullarına uyduğunu bir kez çağırması gerekir.

Bir iş parçacığı, bir mutex nesnesinin sahipliğini bırakmadan sonlandırılırsa, mutex nesnesinin terk edildiği kabul edilir. Bekleyen bir iş parçacığı, terk edilmiş bir mutex nesnesinin sahipliğini alabilir, ancak bekleme işlevi mutex nesnesinin bırakıldığını belirtmek için WAIT_ABANDONED döndürür. Terk edilmiş bir mutex nesnesi, bir hata oluştuğunun ve mutex nesnesi tarafından korunan tüm paylaşılan kaynakların tanımsız durumda olduğunu gösterir. İş parçacığı mutex nesnesi terk edilmemiş gibi devam ederse, iş parçacığı sahipliğini serbest bıraktıktan sonra artık terk edilmiş olarak kabul edilmez. Bu, mutex nesnesine yönelik bir tanıtıcı daha sonra bir bekleme işlevinde belirtilirse normal davranışı geri yükler.

Kritik bölüm nesnelerinin yalnızca tek bir işlemin iş parçacıkları tarafından kullanılabilmesi dışında, kritik bölüm nesnelerinin mutex nesneleri tarafından sağlanana benzer bir eşitleme sağladığını unutmayın.

Mutex Nesneleri Kullanarak