Clasa mutex (ding)

Atunci când două sau mai multe fire au nevoie pentru a avea acces la o resursă partajată, în același timp, sistemul necesită un mecanism de sincronizare pentru a se asigura că doar un singur fir la un moment dat utilizează resursa. Mutex este un primitiv care oferă acces exclusiv la o resursă partajată la un singur fir de sincronizare. Dacă firul devine mutex, al doilea fir care dorește să obțină acest lucru este suspendat până la semafor primul fir eliberează semaforul.

Acest tip implementeaza interfata IDisposable. După finalizarea folosind tip ar trebui să-l elibereze în mod direct sau indirect. Tipul de demontare apela direct blocul său metoda try / catch se elimina. Pentru ao elimina în mod indirect, să folosească constructe lingvistice, cum ar fi utilizarea (în C #) sau Utilizarea (în Visual Basic). Pentru informații suplimentare. A se vedea „Utilizarea obiect implementeaza secțiunea de interfață IDisposable» IDisposable.

Puteți utiliza WaitHandle. Metoda WaitOne care va solicita dreptul de proprietate asupra mutex. Firul de asteptare este blocat până când unul dintre următoarele evenimente:

Pentru a indica nici un semnal deține mutex. În acest caz, metoda returneaza true WaitOne. iar firul apelant își asumă dreptul de proprietate al mutex, și câștigurile accesul la o resursă protejată mutex obiect. După finalizarea accesului la resurse, firul trebuie să apeleze metoda ReleaseMutex pentru a elibera dreptul de proprietate asupra mutex. Primul exemplu prezentat în secțiunea Exemple care șablon.

Intervalul de timeout specificat în metoda apelului WaitOne cu millisecondsTimeout sau parametru timeout. În acest caz, metoda WaitOne returneaza false. și chemarea firul de nici un drept suplimentare pentru a obține posesia mutex. În acest caz, structura de cod, astfel încât accesul la resurse protejate mutex obiect este interzisă în firul de asteptare. Având în vedere că fluxul nu obține dreptul de proprietate asupra mutex, nu ar trebui să fie un motiv metoda ReleaseMutex. In al doilea exemplu, în „exemple“ secțiune prezintă acest model.

Mutex Clasa autentifică fluxuri astfel încât mutex poate fi eliberat doar fluxul le-a primit. Vizavi de clasa Semafor nu furnizează fluxuri de autentificare. Un mutex poate fi transmis prin limitele domeniului de aplicare.

Firul care deține un mutex poate fi solicitat în repetate apeluri WaitOne lui, fără a întrerupe performanță. Cu toate acestea, firul trebuie să apeleze metoda ReleaseMutex aceeași cantitate de timp pentru a elimina proprietatea mutex.

Din moment ce clasa Mutex moștenește de la WaitHandle. Puteți apela, de asemenea, WaitHandle statică. WaitAll și WaitHandle. Metode WaitAny pentru a sincroniza accesul la resursa protejată.

În cazul în care fluxul este finalizat, mutex care deține, mutex în funcție de întrerupere. Starea de mutex specificat de semnal, iar următorul firul de așteptare devine. Incepand cu versiunea 2.0 platforma .NET Framework, excluderea AbandonedMutexException fir următor, care devine mutex abandonat. Înainte de versiunea 2.0 platformă excepție NET Framework nu este creat.

mutex abandonate adesea un semn al unei erori grave în codul. Atunci când un fir se termină fără a elibera obiectul mutex, o structură de date obiect protejat mutex, poate să nu fie într-o stare consistentă. Următorul subiect care cere posesia mutex obiect poate ocupa această excepție și să continue să lucreze, în cazul în care vă puteți asigura integritatea structurilor de date.

În cazul mutex abandonate sistemic mutex poate însemna că o execuție oprire bruscă a cererii (de exemplu, utilizând Windows Task Manager).

Mutecsi sunt de două tipuri: mutecsi locale fără nume și cu numele mutex de sistem. mutex locală există numai într-un singur proces. Acesta poate fi folosit de orice fir în proces, făcând referire la obiectul Mutex reprezentând mutex. Fiecare obiect reprezintă un Mutex Mutex fără nume separat locale.

mutex sistem cu nume sunt disponibile în cadrul întregului sistem de operare și poate fi utilizat pentru a sincroniza activitățile de proces. Puteți crea un mutex numit reprezentând mutex sistem, folosind un constructor care ia un nume. obiect sistem de operare poate fi creat în așa fel, în același timp, sau de acolo pentru a crea un obiect mutex. Puteți crea mai multe obiecte Mutex care reprezintă aceeași mutex de sistem numit, și poate fi utilizată metoda OpenExisting pentru a deschide un mutex sistem numit existent.

Pe server rulează Terminal Services sistem mutex numit poate avea două niveluri de vizibilitate. Dacă numele este prefixat de «Global \», mutex-ul este vizibil în toate sesiunile de server terminale. Dacă numele este prefixat de „\ locală“ mutex-ul este vizibil numai în sesiunea în care a fost creat serverul terminal. În acest caz, un mutex separat cu același nume, poate exista în toate celelalte sesiuni de server terminale pe server. Dacă creați un prefix de mutex numit nu este specificat, este nevoie de prefixul „\ locală“. În sesiune de două mutex nume Terminal Server care diferă numai prefixe sunt mutex separate, și ambele sunt vizibile pentru toate procesele din cadrul sesiunii Terminal Server. Ie namespace prefix „al Global \“ și „\ locală“ descrie domeniul de aplicare în ceea ce privește mutexul sesiuni Terminal Server, și nu asupra proceselor.