Проблемы синхронизации потоков

П

В классе TTread не зря введен метод синхронизации потоков. Он необходим, чтобы как-то блокировать неприятные ситуации, которые могут случиться. Следует отметить, что в примерах, приведенных ранее, имеются дополнительные трудности, связанные с использованием бесконечно работающих потоков (бесконечные циклы). Поэтому даже в случае двух потоков стандартные методы синхронизации иногда не справляются.

Если в процессе работает несколько потоков, то можно ожидать две основные неприятности: тупики и гонки. Тупики возникают, когда два или более потоков ожидают один и тот же ресурс и блокируют друг друга, так как не указано, какой поток должен в такой ситуации получить нужный ресурс. Гонки возникают, когда два или более потоков используют один и тот же ресурс и изменяют его в непредусмотренном порядке, поскольку операционная система может поменять очередность работы потоков. Для разрешения указанных и некоторых других ситуаций разрабатываются дополнительные механизмы синхронизации: ожидания функции и объекты синхронизации.

Среди функций чаще всего используются WaitForSingleObject и Wait-ForMultipleObjects (функции Windows API). Среди объектов выделяются Critical Section (критическая секция), Event (событие), Mutex (взаимное исключение), Semaphore (семафор), Timer (таймер). В различных случаях выбирается свой вариант.

Об авторе

Добавить комментарии

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.

Категории