Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Магальник отчет лаба 2 Гаранин

.docx
Скачиваний:
0
Добавлен:
11.02.2026
Размер:
98.48 Кб
Скачать

ФЕДЕРАЛЬНОЕ АГЕНСТВО ВОЗДУШНОГО ТРАНСПОРТА

(РОСАВИАЦИЯ)

ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ

«МОСКОВСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ ГРАЖДАНСКОЙ АВИАЦИИ» (МГТУ ГА)

Кафедра вычислительных машин, комплексов, сетей и систем.

Лабораторная работа защищена с оценкой ____________________

____________________

(подпись преподавателя, дата)

ЛАБОРАТОРНАЯ РАБОТА №2

по дисциплине «Модели и технологии распределенных вычислений».

Вариант 4

Тема: «Семафоры. Обеспечение взаимного исключения исполнения критических секций.»

Выполнила студентка группы ИС2-1

Магальник Екатерина Борисовна

Руководитель: Гаранин Сергей Александрович

МОСКВА – 2024

Цель лабораторной работы: изучение семафоров, обеспечения взаимного исключения исполнения критических секций

Задание: вариант 4: есть приложение, которое одновременно выполняет несколько потоков, каждый из которых пытается получить доступ к общим ресурсам, например, критической секции кода или общей переменной. Нужно использовать семафор для синхронизации доступа к этим ресурсам и предотвращения состояний гонки.

Теоретические сведения: Семафор — это примитив синхронизации работы процессов и потоков, в основе которого лежит счётчик, над которым можно производить две атомарные операции: увеличение и уменьшение значения на единицу.

Семафор служит для построения более сложных механизмов синхронизации и используется:

  • для синхронизации параллельно работающих задач;

  • для защиты передачи данных через разделяемую память;

  • для защиты критических секций;

  • для управления доступом к аппаратному обеспечению.

Вычислительные семафоры используются для контроля над ограниченными ресурсами.

Листинг:

import threading import time # Создание семафора с начальным значением 2 semaphore = threading.Semaphore(2) # Функция, которая будет выполняться в потоке def critical_section(): # Запрашиваем доступ к критической секции semaphore.acquire() try: # Критическая секция, доступ к общим ресурсам print("Вошел в критическую секцию") time.sleep(5) finally: # Освобождаем доступ к критической секции semaphore.release() print("Вышел из критической секции") # Создание нескольких потоков threads = [] for i in range(5): t = threading.Thread(target=critical_section) threads.append(t) t.start() # Ожидание завершения всех потоков for t in threads: t.join() print("Все потоки завершили выполнение")

Результат работы программы: