ПредишенСледващото

Синхронизация обекти: мутекс, семафор, критична точка

Критични участъци предоставят синхронизация като mutexes (около mutexes см. По-долу), с изключение, че обектите на критичните участъци са на разположение в рамките на един процес. Събития и mutexes и семафори също могат да бъдат използвани в "единичен процес" приложение, но критични участъци осигурят по-бързо и по-ефективен механизъм за синхронизация взаимно изключване. Подобно на мутекс обект, представляващ критичен участък може да се използва само от един конец в даден момент, което ги прави изключително полезни при разграничаване на достъп до споделени ресурси. Трудно е да се предположи, нищо за реда, по който потоци ще получат достъп до ресурс, можем само да кажем, че системата ще бъде "справедливо" на всички потоци.

Mutex (взаимно изключване, мутекс) - е обект на синхронизация, който е инсталиран в специален алармено състояние, когато не се занимава с всеки поток. Само една нишка държи обекта във всеки даден момент, откъдето идва и името на такива обекти - едновременен достъп до общ ресурс е изключено. Например, за да се изключи записването на два потока в едно общо място на паметта в същото време, всяка нишка изчаква мутекс е свободен, той става собственик и след това пише нещо в тази част от паметта. След всички необходими действия мутекс се освобождава, което позволява на други теми, да имат достъп до споделен ресурс.

Две (или повече) процес може да създаде мутекс със същото име, като се обадите метод CreateMutex. Първият процес създава мутекс и следните процеси са дръжката на съществуващ обект. Това позволява на множество процеси, за да се справя със същото мутекс, освобождавайки програмист да се налага да се притеснявате за това, кой всъщност създава мутекс. Ако използвате този подход, е желателно да се установи bInitialOwner флаг, за да FALSE, в противен случай няма да има затруднения при определяне на действителния създател на мутекс.

Няколко процеси могат да получат дръжката на същото MUTEX, която позволява комуникация между процеси. Можете да използвате следните механизми на този подход:

Процесът на дете, създадени с функцията CreateProcess могат да наследят дръжката на мутекс ако когато (мутекс) създаване Funk CreateMutex параметър е посочен lpMutexAttributes.

Процесът може да получи дубликат съществуващата мутекс чрез функция DuplicateHandle.

Процесът може да укажете името на съществуваща мутекс, когато се обадите или OpenMutex CreateMutex функции.

Най-общо казано, ако синхронизирате потоци от един процес, по-добър подход е да се използва критични участъци.

Свързани статии

Подкрепете проекта - споделете линка, благодаря!