Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
11
Добавлен:
27.03.2016
Размер:
27.65 Кб
Скачать

Лабораторна робота N 4

Тема:

Синхронизація потоків. Використання критичних секцій.

Завдання:

Скласти програму, в якій ініціалізувати критичну секцію (lock) і після створення 4 потоків, захопити критичну секцію для блокування інших 3-х потоків процесу на 1000 мс, вивести повідомлення “потік № знаходиться в критичній секції і звільнити її.

Теоритичні відомості:

Синхронизация работы нескольких потоков Для синхронизации нескольких потоков используют следующие объекты: критические секции, семафоры, защелки. 1. Критические секции. Критические секции используются для контроля доступа к защищенным данным. Их можно использовать внутри одного класса для синхронизации чтения-доступа к данным.

class cls

{

private:

   int val;

   CCriticalSection section;

public:

   void write(int);

   void read(int*);

}

void cls::write(int n)

{

   section.Lock();

   val=n;

   section.Unlock();

}

void cls::read(int * n)

{

   section.Lock();

   *n=val;

   section.Unlock();

}

При вызове метода Lock() происходит блокировка секции, и последующие вызовы этого метода не возвратят управление вызывающему потоку до тех пор, пока секция не будет освобождена. Из данного примера видно, что при записи нового значения невозможно прочитать старое. Соответственно при чтении значения его невозможно изменить. Если в работе участвуют большие объемы данных, то для предотвращения сбоя необходим контроль. Критические секции обеспечивают минимальную защиту от сбоев.

Соседние файлы в папке Semestr2