Форум: "Основная";
Текущий архив: 2004.08.08;
Скачать: [xml.tar.bz2];
ВнизСпецы трединга помогите Найти похожие ветки
← →
dron (2004-07-27 16:29) [0]Хочется чтобы ктонибудь раз и навсегда объяснил отличия плюсы и минусы юзания потоков с мьютексами, семафорами, критическими секциями api, критическими секциями vcl, может кто поможет полезной ссылкой с пояснениями на русском обо всём этом. может ктото сможет вкартце рассказать что тут для чего.
← →
Игорь Шевченко © (2004-07-27 16:33) [1]
> Хочется чтобы ктонибудь раз и навсегда объяснил отличия
> плюсы и минусы юзания потоков с мьютексами, семафорами,
> критическими секциями api
Джеффри Рихтер, например, объясняет. Говорят, неплохо
← →
VMcL © (2004-07-27 16:41) [2]http://podgoretsky.com/ftp/Docs/Classics/Richter/
← →
dron (2004-07-27 17:51) [3]спасибо, написано хорошо, но вот чтож господин рихтер всё на си да си мне примеры показывает) в принципе разобрать можно что написано но напряжно)
← →
Игорь Шевченко © (2004-07-27 18:03) [4]Есть небольшой пример на Delphi (по тому же Рихтеру)
http://www.schevchenko.net.ru/SRC/SuperMarket_50.zip
← →
GanibalLector © (2004-07-27 19:40) [5]2 dron
А мне нравится критическими секциями пользоваться.
← →
Berill © (2004-07-28 09:20) [6]Привожу текст из книги (незнаю где ее найти).
Критические секции(по-моему речь идет об API критических функциях) представляют собой один из самых простых способ синхронизации потоков. Критическая секция - это некоторый участок кода, который в каждый момент времени может выполняться только одним из потоков.
До использования критической секции необходимо инициализировать ее с помощью процедуры:procedure InitializeCriticalSection(var lpCriticalSection: TRTLCriticalSection);stdcall;
После заполнения записи в программе можно создать критическую секцию, поместив некоторый участок ее текста между вызовами процедур:procedure EnterCriticalSection(var lpCriticalSection: TRTLCriticalSection);stdcall;
procedure LeaveCriticalSection(var lpCriticalSection: TRTLCriticalSection);stdcall;
По окончании работы с записью TRTLCriticalSection необходимо освободить ее, вызвав процедуру:procedure DeleteCriticalSection(var lpCriticalSection: TRTLCriticalSection);stdcall;
Мьютексы. По принципу своего действия мьютексы очень похожи на критические секции, за исключением двух моментов.
1. Мьютексы можно использовать для синхронизации потоков, переступая через границы процессов.
2. Мьютексу можно присвоить имя и путем ссылки на это имя создать дополнительные дескрипторы существующих объектов мьютексов.
Критические секции очень эффективны: если нет потоковых коллизий, то на вход или выход из критической секции уходит всего 10-15 системных тактов процессора, а для мьютекса от 400 до 600 системных тактов процессора.
Функция, используемая для создания мьютекса:function CreateMutex(lpMutexAttributes: PSecurityAttributes;
bInitialOwner: Bool; lpName: PChar): THandle; stdcall;
Обычно в кач-ве параметра lpMutexAttributes передается nil.
Параметр bInitialOwner определяет, следует ли считать поток, создающий мьютекс, его владельцем. Если этот параметр равен False, то мьютекс не имеет владельца.
Параметр lpName представляет имя мьютекса.
По завершении использования мьютекса неоюходимо закрыть его с помощью ф-ции CloseHandle().
В семафорах применен принцип действия мьютексов, но с добавдением одной существенной детали. В них заложена возможность подсчета ресурсов, что позволяет заранее определенному числу потоков одновременно войти в синхронизируемый участок кода.
Для создания:function CreateSemaphore(lpSemaphoreAttributes: PSecurityAttributes; lInitialCount, lMaximumCount: Longint; lpName: PChar);stdcall;
Параметр lInitialCount представляет собой начальное значение счетчика семафорного объекта. Это число может находится в диапозоне от 0 до значения lMaximumCount. Семафор доступен, если значение этого параметра больше 0. Когда поток вызывает ф-цию WaitForSingleObject() или любую другую,
ей подобную, значение счетчика уменьшается на еденицу. И наоброт, при вызове потоком функции ReleaseSemaphore() значение счетчика семафора увеличивается на единицу.
← →
dron (2004-07-28 11:15) [7]Ребята спасибо огромное!
теперь хоть стало более менее ясно как с ними бороться.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2004.08.08;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.035 c