Використання мьютексного атрибутного об'єкта

Найбільший інтерес представляє установка атрибуту, пов'язаного з тим, яким має бути м'ютекс: закритим або розділяються. Закриті м'ютекси розділяються між потоками одного процесу. Можна або оголосити м'ютекс глобальним, або організувати передачу дескриптора між потоками. Спільні м'ютекси використовуються потоками, що мають доступ до пам'яті, в якій роз щ ен даний м'ютекс. Такий м'ютекс можуть розділяти потоки різних процесів. Принцип дії закритого і розділяється м'ютексів показаний на рис. 5.5. Якщо розділяти м'ютекс доводиться потокам різних процесів, його необхідно розмістити в пам'яті, яка є спільною для цих процесів. У бібліотеці POSIX визначено кілька функцій, призначених для розподілу пам'яті між об'єктами з допомогою відображаються в пам'яті файлів і об'єктів, що розділяється пам'яті. У процесах м'ютекси можна використовувати для захисту критичних розділів, які отримують доступ до файлів, каналам, спільної пам'яті і зовнішніх пристроїв.

Використання мьютексних семафорів для управління критичними розділами

М'ютекси використовуються для управління критичними розділами процесів і потоків, щоб запобігти виникненню умов «гонок». М'ютекси дозволяють уникнути умов «гонок», реалізуючи послідовний доступ до критичного розділу. Розглянемо код лістінга5.1. У ньому демонструється виконання двох потоків. Для захисту їх критичних розділів і використовуються м'ютекси.

// Лістинг 5.1. Використання м'ютексів для захисту

// критичних розділів потоків

pthread_t ThreadA, ThreadB; pthread_mutex_t Mutex, -pthread_mutexattr_t MutexAttr;

void * task1 (void * X)

pthread_mutex_lock (Mutex); // Критичний розділ коду.

void * task2 (void * X)

// Критичний розділ коду.

pthread_mutex_unlосk (Mu t ex); return (0);