Составители:
Рубрика:
16
Рис. 12.
Децентрализованная
схема
Многопоточные программы
Поток
(
нить
)
представляет
собой
последовательный
поток
управления
(
последовательность
команд
)
в
рамках
одной
программы
.
При
создании
процесса
порождается
главный
поток
,
выполняющий
инициализацию
процесса
.
Он
же
начинает
выполнение
команд
.
Поток
и
процесс
соотносятся
следующим
образом
:
•
процесс
имеет
главный
поток
,
инициализирующий
выполнение
команд
процесса
;
•
любой
поток
может
порождать
в
рамках
одного
процесса
другие
потоки
;
•
каждый
поток
имеет
собственный
стек
;
•
потоки
,
соответствующие
одному
процессу
,
имеют
общие
сегменты
кода
и
данных
.
При
разработке
многопоточных
приложений
возникают
те
же
проблемы
,
что
и
при
разработке
параллельных
.
Это
:
•
гонки
за
данными
;
•
блокировки
;
•
активные
блокировки
;
•
несбалансированность
загрузки
.
Гонки за данными
Гонки
за
данными
являются
следствием
зависимостей
,
когда
несколько
потоков
модифицируют
содержимое
одной
и
той
же
области
памяти
.
Наличие
гонок
за
данными
не
всегда
является
очевидным
.
Они
могут
приводить
к
конфликтам
двух
типов
:
1.
конфликт
«
чтение
-
запись
»;
2.
конфликт
«
запись
-
запись
».
Имеются
два
способа
борьбы
с
гонками
за
данными
:
Страницы
- « первая
- ‹ предыдущая
- …
- 14
- 15
- 16
- 17
- 18
- …
- следующая ›
- последняя »
