Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Синхронизация потоков. ⇐ ПредыдущаяСтр 2 из 2
Помимо координации работы потоков с помощью приоритетов потоков в приложении также часто бывает необходимым синхронизировать потоки, например, если они пытаются одновременно что-то сделать, Критические разделы. (critical section) Для создания и использования критического раздела, нужно объявить переменную типа CRITICAL_SECTION, в примере в Unit1.h ... // Потом эту переменную CS нужно инициализировать (создать критический раздел) // используем критический раздел в потоке, когда нужно блокировать доступ к данным Когда критический раздел становиться не нужен, удаляем его
Мьютексы. (mutex) Мьютексы выполняются медленнее критических разделов, однако они обладают большими возможностями, чем критические разделы. Так, например, они могут использоваться разными процессами. Создаются они с помощью API-функции CreateMutex(), работа с ними также осуществляется с помощью API-функций, таких как WaitForSingleObject(), ReleaseMutex(), и др.
Предупреждение: исключения, которые возбуждены, но не перехвачены в TThread потомке при выполнении в методе Execute могут стать причиной access violations, когда Вы выполняете приложение вне интегрированной среды разработки. Вы можете принять меры против этого access violation, обеспечив метод Execute блоком try.._finally, который включает тело этого метода. Каждый поток представляет собой объект, созданный системным менеджером объектов.
|