Zaman Uyumu Sağlayıcılar

Bir kaynağa özel erişim sağlamak için bir nesnesi kullanabilirsiniz Mutex . sınıfı Mutex sınıftan Monitor daha fazla sistem kaynağı kullanır, ancak uygulama etki alanı sınırları arasında sıralanabilir, birden çok bekleme ile kullanılabilir ve farklı işlemlerdeki iş parçacıklarını eşitlemek için kullanılabilir. Yönetilen eşitleme mekanizmalarının karşılaştırması için bkz . Eşitleme Temel Bilgilerine Genel Bakış.

Kod örnekleri için oluşturucuların başvuru belgelerine Mutex bakın.

Mutexes kullanma

İş parçacığı sahiplik istemek için bir mutex yöntemini çağırır WaitOne . Çağrı, mutex kullanılabilir duruma gelene kadar veya isteğe bağlı zaman aşımı aralığı geçene kadar engeller. Bir iş parçacığına sahip değilse bir mutex'in durumu işaret edilir.

bir iş parçacığı yöntemini çağırarak ReleaseMutex bir mutex serbest bırakır. Mutex'ler iş parçacığı benzitesi içerir; yani, mutex yalnızca sahibi olan iş parçacığı tarafından serbest bırakılabilir. Bir iş parçacığı sahip olmadığı bir mutex bırakırsa, iş parçacığında bir ApplicationException oluşturulur.

Mutex sınıfı öğesinden WaitHandletüretildiği için, diğer bekleme tanıtıcılarıyla WaitHandle birlikte bir Mutex öğesinin sahipliğini istemek için statik WaitAll veya WaitAny yöntemlerini de çağırabilirsiniz.

bir iş parçacığının sahibi Mutexise, bu iş parçacığı yürütmesini engellemeden yinelenen bekleme isteği çağrılarında aynı Mutex değeri belirtebilir; ancak sahipliği serbest bırakmak için bu kadar çok kez serbest Mutex bırakması gerekir.

Terk edilmiş mutexes

Bir iş parçacığı serbest bırakmadan Mutexsonlandırılırsa, mutex'in bırakılacağı söylenir. Bu durum genellikle önemli bir programlama hatası olduğunu gösterir çünkü mutex'in koruduğu kaynak tutarsız bir durumda bırakılabilir. mutex'i alan sonraki iş parçacığında bir AbandonedMutexException oluşturulur.

Sistem genelinde bir mutex söz konusu olduğunda, terk edilmiş bir mutex bir uygulamanın aniden sonlandırıldığını gösterebilir (örneğin, Windows Görev Yöneticisi kullanılarak).

Yerel ve sistem mutex'leri

Mutexler iki türdendir: yerel mutexler ve adlandırılmış sistem mutexleri. Bir adı kabul eden bir oluşturucu kullanarak bir Mutex nesne oluşturursanız, bu adın işletim sistemi nesnesiyle ilişkilendirilir. Adlandırılmış sistem mutex'leri işletim sistemi genelinde görünür ve işlemlerin etkinliklerini eşitlemek için kullanılabilir. Aynı adlandırılmış sistem mutex'ini temsil eden birden çok Mutex nesne oluşturabilir ve yöntemini kullanarak OpenExisting mevcut adlandırılmış bir sistem mutex'ini açabilirsiniz.

Yerel bir mutex yalnızca sizin işleminizde bulunur. Yerel nesneye başvurusu Mutex olan işleminizdeki herhangi bir iş parçacığı tarafından kullanılabilir. Her Mutex nesne ayrı bir yerel mutex'tir.

Sistem mutex'leri için erişim denetimi güvenliği

.NET Framework, adlandırılmış sistem nesneleri için Windows erişim denetimi güvenliğini sorgulama ve ayarlama olanağı sağlar. Sistem nesneleri genel olduğundan ve bu nedenle kendi dışındaki kodlar tarafından kilitlenebildiği için sistem mutex'lerini oluşturma anından korumanız önerilir.

Mutexes için erişim denetimi güvenliği hakkında bilgi için, ve MutexAccessRule sınıflarına, numaralandırmayaMutexRights, sınıfın GetAccessControl, SetAccessControlve OpenExisting yöntemlerine Mutex ve oluşturucuya Mutex(Boolean, String, Boolean, MutexSecurity) bakınMutexSecurity.

Not

Sistem mutex'leri için erişim denetimi güvenliği yalnızca .NET Framework ile kullanılabilir, .NET Core veya .NET 5+ ile kullanılamaz.

Ayrıca bkz.