www.wikidata.uk-ua.nina.az
M yu teks angl mutex vid angl mutual exclusion vzayemne viklyuchennya priznacheno dlya zahistu pevnogo ob yekta u potoci vid dostupu inshih potokiv M yuteks ye odnim iz zasobiv sinhronizaciyi roboti potokiv abo procesiv 1 Zmist 1 Zagalno 2 Porivnyannya m yuteksiv ta kritichnih sekcij 3 Robota z m yuteksami u Windows 3 1 Priklad vikoristannya m yuteksa 4 Primitki 5 Div takozhZagalno red M yuteksi ye odnim z variantiv semafornih mehanizmiv dlya organizaciyi vzayemnogo viklyuchennya Voni realizovani v bagatoh OS yihnye osnovne priznachennya organizaciya vzayemnogo viklyuchennya dlya potokiv z odnogo i togo zh abo riznih procesiv M yuteksi ce prosti dvijkovi semafori yaki mozhut perebuvati v odnomu z dvoh staniv signalnomu abo nesignalnomu vidkritij i zakritij vidpovidno Koli potik otrimuye m yuteks toj perevoditsya v nesignalnij stan Organizaciya poslidovnogo dostupu do resursiv z vikoristannyam m yuteksiv staye neskladnoyu oskilki v kozhen konkretnij moment tilki odin potik mozhe voloditi cim ob yektom Dlya togo shob ob yekt mutex stav dostupnij potokam sho nalezhat riznim procesam pri stvorenni jomu neobhidno prisvoyiti im ya Potim ce im ya potribno peredati u spadok zavdannyam yaki povinni jogo vikoristovuvati dlya vzayemodiyi Dlya cogo vvodyatsya specialni sistemni vikliki napriklad CreateMutex u Windows v yakih ukazuyetsya pochatkove znachennya m yuteksa i jogo im ya Dlya roboti z m yuteksom ye kilka funkcij Krim vzhe zgadanoyi funkciyi stvorennya takogo ob yekta CreateMutex ye funkciyi vidkrittya OpenMutex i funkciya zvilnennya cogo ob yekta ReleaseMutex Konkretni zvernennya do cih funkcij i pereliki peredavanih i otrimuvanih parametriv potribno divitisya v dokumentaciyi na vidpovidnu OS Porivnyannya m yuteksiv ta kritichnih sekcij red Porivnyano z kritichnoyu sekciyeyu jogo funkcionalnist desho rozshirena M yuteksi mozhut mati imena i deskriptori Voni ye ob yektami yadra v toj chas yak kritichni sekciyi nalezhat procesu tomu yih mozhna vikoristovuvati dlya sinhronizaciyi potokiv iz riznih procesiv Napriklad dva procesi yaki rozdilyayut spilnu pam yat cherez vidobrazhennya fajliv mozhut vikoristovuvati m yuteks dlya sinhronizaciyi dostupu do neyi Tak yak m yuteksi ye ob yektami yadra i mayut skladnishu realizaciyu na yih obrobku yak pravilo vitrachayetsya bilshe chasu porivnyano z kritichnimi sekciyami Tomu yaksho potribno sinhronizuvati robotu potokiv odnogo procesu varto koristuvatisya kritichnimi sekciyami Robota z m yuteksami u Windows red M yuteks perebuvaye v signalnomu stani tilki todi koli vin ne nalezhit zhodnomu iz procesiv Yak tilki hocha b odin proces zapituye volodinnya m yuteksom vin perehodit u nesignalnij stan i zalishayetsya v nomu doti poki ne bude zvilnenij vlasnikom Na vidminu vid kritichnih sekcij m yuteksi dozvolyayut zadavati tochnij interval ochikuvannya a m yuteksi zalisheni zakinchenimi procesami avtomatichno perehodyat u signalnij stan Dlya stvorennya m yuteksa vikoristovuyetsya funkciya CreateMutex Yiyi opis movoyu C 2 HANDLE WINAPI CreateMutex in opt LPSECURITY ATTRIBUTES lpMutexAttributes in BOOL bInitialOwner in opt LPCTSTR lpName Opis movoyu Delphi 1 function CreateMutex lpMutexAttributes PSecurityAttributes Atributi dostupu bInitialOwner BOOL Zadaye chi bude proces voloditi m yuteksom vidrazu pislya stvorennya lpName PChar Im ya m yuteksa THandle Funkciya povertaye deskriptor stvorenogo m yuteksa abo 0 pri nevdalomu zavershenni Yaksho m yuteks iz zadanim im yam vzhe isnuye povertayetsya jogo deskriptor U comu vipadku funkciya API GetLastError poverne kod pomilki ERROR ALREDY EXISTS Im ya ne povinno zbigatisya z im yam uzhe isnuyuchogo ob yekta tipu Semaphore Event Job Waitable Timer abo File Mapping Im ya mozhe mati prefiks Global abo Local yaki vidpovidno vkazuyut na stvorennya ob yekta u globalnomu abo sesijnomu prostori imen Yaksho nevidomo chi isnuye vzhe m yuteks iz zadanim im yam programa ne povinna zapituvati volodinnya ob yektom pri stvorenni tobto povinna peredati znachennya false yak bInitialOwner Yaksho m yuteks uzhe isnuye programa mozhe otrimati jogo deskriptor funkciyeyu OpenMutex Yiyi opis na C 3 HANDLE WINAPI OpenMutex in DWORD dwDesiredAccess in BOOL bInheritHandle in LPCTSTR lpName Opis na Delphi 1 function OpenMutex dwDesiredAccess DWORD Zadaye prava dostupu do ob yekta bInheritHandle BOOL Zadaye chi mozhe ob yekt uspadkovuvatisya dochirnimi procesami lpName PChar Im ya m yuteksa THandle Parametr dwDesiredAccess mozhe nabuvati odne z takih znachen MUTEX ALL ACCESS programa otrimuye povnij dostup do ob yekta MUTEX MODIFY STATE pravo zminyuvati stan m yuteksa potribne dlya zvilnennya m yuteksa funkciyeyu ReleaseMutex SYNCHRONIZE programa mozhe vikoristovuvati ob yekt tilki u funkciyah ochikuvannya j funkciyi ReleaseMutex Funkciya povertaye deskriptor vidkritogo m yuteksa abo 0 u vipadku pomilki Potik zahoplyuye volodinnya m yuteksom cherez viklik odniyeyi z funkcij ochikuvannya WaitForSingleObject WaitForMultipleObjects tosho vidnosno deskriptora m yuteksa Vivilnyayetsya m yuteks za dopomogoyu funkciyi ReleaseMutex Yiyi viznachennya na C 4 BOOL WINAPI ReleaseMutex in HANDLE hMutex I na Delphi 1 function ReleaseMutex hMutex THandle BOOL Priklad vikoristannya m yuteksa red Nizhche privedeno fragment kodu potoku 1 movoyu Delphi yakij zbilshuye na 1 spilnu dlya kilkoh potokiv zminnu A Priklad peredbachaye sho isnuye kilka potokiv yaki vikonuyut taku zh diyu Pered zvertannyam do spilnoyi zminnoyi potik ochikuye na zvilnennya m yuteksa Yaksho takoyi sinhronizaciyi ne vikoristovuvati to vinikatime konkurenciya potokiv const MutexName IMut function ThreadFunc Ptr Pointer LongInt var I integer hIMut THandle begin for I 1 to 1000000 do begin Yakijs kod hIMut CreateMutex 0 false MutexName WaitForSingleObject hIMut INFINITE Inc A ReleaseMutex hIMut Yakijs kod end end Primitki red a b v g d Konovalenko I V Fedoriv P S Sistemne programuvannya u Windows z prikladami na Delphi T TNTU 2012 Arhivovano 8 grudnya 2012 u Wayback Machine MSDN CreateMutex function Arhiv originalu za 18 kvitnya 2012 Procitovano 14 travnya 2012 MSDN OpenMutex function Arhiv originalu za 21 kvitnya 2012 Procitovano 14 travnya 2012 MSDN ReleaseMutex function Arhiv originalu za 20 kvitnya 2012 Procitovano 14 travnya 2012 Div takozh red Bagatonitevist Nit Sinhronizaciya procesiv Kritichna sekciya Semafor programuvannya F yuteks shvidkij koristuvackij m yuteks Podiya Windows Cya stattya potrebuye dodatkovih posilan na dzherela dlya polipshennya yiyi perevirnosti Bud laska dopomozhit udoskonaliti cyu stattyu dodavshi posilannya na nadijni avtoritetni dzherela Zvernitsya na storinku obgovorennya za poyasnennyami ta dopomozhit vipraviti nedoliki Material bez dzherel mozhe buti piddano sumnivu ta vilucheno sichen 2016 nbsp Ce nezavershena stattya pro programuvannya Vi mozhete dopomogti proyektu vipravivshi abo dopisavshi yiyi nbsp Ce nezavershena stattya pro operacijni sistemi Vi mozhete dopomogti proyektu vipravivshi abo dopisavshi yiyi Otrimano z https uk wikipedia org w index php title M 27yuteks amp oldid 35280439