- •Курсовая работа на тему:
- •К. Т. Н., доцент
- •Оглавление
- •Введение
- •1.Теоретические сведения
- •1.1 Методы синхронизации
- •1.2 Синхронизация потоков, классические задачи
- •2. Постановка задачи.
- •Проблемы
- •Решение задачи. Иерархия ресурсов.
- •3. ИспользованныеApi-функции
- •4. Модульная схема
- •Использованная литература
- •Приложение Основной модуль Filosof.Pas
- •Interface
- •Implementation
- •UnitUnit1
- •Interface
- •Implementation
- •UnitUnit2
- •Interface
- •Implementation
4. Модульная схема
Интерфейс
пользователя и организация работы
потоков
Unit1
Модуль
для работы с потоками
Filosof
Описание основного модуляUnit1.pas
procedure ShowState(State:Byte;FilosofIndex:Byte) – процедура показывает на форме состояние State философа FilosofIndex
procedure FilosofVilkaCapture(Sender: TObject); - процедуры обработки
procedure FilosofNojCapture(Sender: TObject); взятия/освобождения вилки или ножа
procedure FilosofVilkaPut(Sender: TObject);
procedure FilosofNojPut(Sender: TObject);
Описание модуляFilosof.pas
В данном модуле описан класс TFilosof
5. Результаты тестирования программы
Начальное состояние программы
Состояние после запуска
Заключение
Итак, в этой курсовой работе было реализовано решение задачи «обедающие философы». Были изучены и закреплены навыки работы с потоками (создание, удаление), синхронизация потоков и обработка исключительных ситуаций.
Для разработки приложения использовались функции Win32 API.
Цель этой работы – изучить суть классической проблемы – синхронизации потоков. Несомненно, эта цель была достигнута. Однако мысль не стоит на месте, и возможно, уже были придуманы новые алгоритмы синхронизации, усовершенствованы и созданы новые пути решений. Но основа – суть проблемы – неизменна. Именно основе была посвящена данная курсовая работа.
Использованная литература
1.Э. Таненбаум, Современные операционные системы 2-е изд. - СПб Питер 2002 - 1040 стр.: ил.
2. Назарр К., Рихтер Дж. Windows via C/C++. Изд. Питер, 2009 г. , 896 стр.
3. Русская справка по Windows API, Windows SDK
4. http://www.msdn.microsoft.com
Приложение Основной модуль Filosof.Pas
unit Filosof;
Interface
uses Windows,SysUtils,Classes;
type
TFilosof = class
private
FVilka:THandle;
FNoj:THandle;
FThread:THandle;
FState:byte; // 0-Думает 1-Ест 2-Голодает 4 - Взял только вилку
FWorkThread:Boolean;
FTimeToThink:Cardinal; // в секундах
FTimeToEat:Cardinal;
FOnVilkaCapture:TNotifyEvent;
FOnNojCapture:TNotifyEvent;
FOnVilkaPut:TNotifyEvent;
FOnNojPut:TNotifyEvent;
procedure SetTimeToThink(const Value: Cardinal);
procedure SetTimeToEat(const Value: Cardinal);
protected
procedure DoVilkaCapture; virtual;
procedure DoNojCapture; virtual;
procedure DoVilkaPut; virtual;
procedure DoNojPut; virtual;
public
property TimeToThink:Cardinal read FTimeToThink write SetTimeToThink;
property TimeToEat:Cardinal read FTimeToEat write SetTimeToEat;
property State:Byte read FState;
property OnVilkaCapture: TNotifyEvent read FOnVilkaCapture write FOnVilkaCapture;
property OnNojCapture: TNotifyEvent read FOnNojCapture write FOnNojCapture;
property OnVilkaPut: TNotifyEvent read FOnVilkaPut write FOnVilkaPut;
property OnNojPut: TNotifyEvent read FOnNojPut write FOnNojPut;
constructor Create(AVilka,ANoj:THandle);
destructor Destroy; override;
procedure Start;
procedure Stop;
end;