Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.039 c
3-1089719670
MORA
2004-07-13 15:54
2004.08.08
RXDBComboEdit


1-1090585840
zorik
2004-07-23 16:30
2004.08.08
Создать форму


3-1089810976
RavenD
2004-07-14 17:16
2004.08.08
CASE для FireBird?


1-1090504562
RedLord
2004-07-22 17:56
2004.08.08
оптимизация на быстродействие


14-1090416893
но найм
2004-07-21 17:34
2004.08.08
Конкурс !!!





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский