Клас мутекс (Дин)

Когато две или повече нишки се нуждаят от достъп до споделен ресурс в същото време, системата изисква механизъм за синхронизация, за да се гарантира, че само една нишка в даден момент използва ресурса. Mutex е на примитивно, която осигурява изключителен достъп до споделен ресурс само до един конци синхронизация. Ако конецът получава мутекс, втората нишка, които желаят да получат този семафор е спряно до първата нишка освобождава семафора.

Този тип реализира интерфейса IDisposable. След приключване използване тип трябва да я освободите, пряко или косвено. тип Премахване директно обаждане му Изхвърлете блок метод пробвам / улов. За да го премахнете непряко, да се използват езикови конструкции като се използва (в C #) или помощта (в Visual Basic). За допълнителна информация. Вижте "Използване на обект реализира раздел интерфейс IDisposable» IDisposable.

Можете да използвате WaitHandle. метод WaitOne, че ще поиска собствеността на мутекс. наричайки нишка е блокиран, докато един от следните събития:

За да не показват сигнали е собственик на мутекс. В този случай, методът връща вярно WaitOne. и конеца от призванието поема собствеността на мутекс и получи достъп до защитено ресурс обект мутекс. След приключване на достъп до ресурса, резбата трябва да се извика методът ReleaseMutex да освободи собствеността на мутекс. Първият пример, представена в раздела Примери този шаблон.

Интервалът на изчакване е посочено в метод за повикване WaitOne като millisecondsTimeout или изчакване параметър. В този случай, метод WaitOne връща лъжа. и извикването на нишка някакви други права, за да се получи владение на мутекс. В този случай код структура, така че достъп до защитени ресурси обект мутекс на е забранено в нишка призвание. Тъй като потокът никога няма да се собствеността на мутекс, тя не трябва да бъде причина метод ReleaseMutex. Във втория пример на "Примерите" раздела показва този модел.

Mutex клас удостоверява потоци, така мутекс може да бъде освободен само поток го получили. Срещу класа Semaphore не предвижда удостоверяване потоци. А мутекс могат да се предават чрез границите на приложение на домейни.

Нишката, която е собственик на мутекс може да бъде поискана в неговата многократни призиви WaitOne без да се прекъсва изпълнението. Въпреки това, трябва да се обадите на нишката метод ReleaseMutex същия период от време, за да се отстранят собствеността на мутекс.

От Mutex клас наследява от WaitHandle. Можете също така да се обадите на статично WaitHandle. WaitAll и WaitHandle. WaitAny методи за синхронизиране на достъп до защитено ресурс.

Ако потокът е завършена, притежаване мутекс г. мутекс според прекъсването. Състоянието на мутекс определен сигнал, а на следващия чакащите нишка получава. Започвайки с версия 2.0 на .NET Framework платформа, изключване AbandonedMutexException следващата нишка, която получава Изоставен мутекс. Преди версия 2.0 платформа .NET Framework изключение не е създаден.

Изоставен мутекс често е признак на сериозна грешка в кода. Когато резба завършва без освобождаване на мутекс обекта, структурата на данните защитен обект мутекс а, не може да бъде в съответствие състояние. Следваща тема, която изисква притежаването на мутекс на обект може да се оправя с това изключение и да продължи да работи, ако може да се гарантира целостта на структури от данни.

В случай на системна мутекс Изоставен мутекс може да означава, че внезапно спиране изпълнението на молбата (например, с помощта на диспечера на задачите на Windows).

Mutexes са два вида: местни mutexes неназовани и именувани mutexes система. Местна мутекс съществува само в рамките на един процес. Може да се използва от всяка нишка в процеса, като позоваване на обекта Mutex представляващ MUTEX. Всеки обект представлява неназован Mutex Mutex отделен местен.

Named система mutexes са на разположение в рамките на цялата операционна система и може да се използва за синхронизиране на дейностите на процеса. Можете да създадете име Mutex представляващ мутекс система, с помощта на конструктор, който се име. операционна система, обект може да бъде създадена по такъв начин, в същото време, или там, за да се създаде Mutex обект. Можете да създадете няколко мутекс обекти, които представляват едно и също име система мутекс, и може да се използва метод OpenExisting да отворите съществуващ име система мутекс.

На сървърът работи, Terminal Services име мутекс система може да има две нива на видимост. Ако името е с префикс «Global \», на мутекс се вижда във всички терминални сървъри сесии. Ако името е с префикс "местен \" на мутекс се вижда само в сесията, където е създаден сървър терминал. В този случай, отделна мутекс със същото име може да съществува във всички други терминални сървъри сесии на сървъра. Ако създадете име мутекс префикс не е уточнено, отнема префикс "местен \". При сесия имена Terminal Server две мутекси които се различават само представки са отделни мутекс и двете са видими за всички процеси в Terminal Server сесия. Т.е. пространство от имена префикс "на Global \" и "Local \" описва обхвата по отношение на мутекс сесии терминал сървър, а не върху процесите.