Составители:
30
Отметим, что невозможно реализовать такую форму синхронизации с
помощью мьютекса, поскольку он рассчитан только на один поток, что было
бы хорошо в случае записи, но мьютекс не способен разрешить доступ к
разделяемой области данных нескольким потокам в случае чтения. Сема-
фор также бесполезен, потому что не позволяет различить 2 режима досту-
па – применение семафора могло бы обеспечить доступ нескольких «чита-
телей», но при попытке «писателя» завладеть семафором его вызов ничем
бы не отличался от вызовов «читателей», что привело бы к ситуации с
множеством неблокированных «писателей».
2.9. Синхронизация через диспетчеризующий механизм
Выбор дисциплины диспетчеризации типа FIFO («первый вошел – пер-
вый вышел») гарантирует, что никакие 2 потока с одинаковым приоритетом
не смогут одновременно выполнять критическую секцию, а будут делать это
только последовательно, когда один поток передаст процессор другому по-
току. При практической реализации этого механизма необходимо:
• обеспечить условия, при которых все потоки, имеющие доступ к кри-
тической секции, имели бы одинаковый приоритет;
• тщательно документировать программный продукт, организационно
исключив возможность изменения дисциплины диспетчеризации FIFO;
• не применять данный механизм для многопроцессорных платформ.
2.10. Синхронизация через атомарные функции
Термин атомарный означает неделимый. В некоторых случаях может
потребоваться выполнить короткую математическую операцию с гарантией,
что она не будет прервана другим потоком или процедурой прерывания. В
QNX-Neutrino этот механизм обеспечивается атомарными операциями,
представленными в табл. 2.6.
Таблица 2.6
Функция Описание
atomic_add(), atomic_add_value() Добавление значения
atomic_clr(), atomic_clr_value() Сброс бит
atomic_set(), atomic_set_value() Установка бит
atomic_sub(), atomic_sub_value() Вычитание значения
atomic_toggle(), atomic_toggle_value() Переключение бит
Все операции выполняются над одной переменной. Версии операций с
добавкой _value возвращают, кроме того, прежние значения переменной.
Страницы
- « первая
- ‹ предыдущая
- …
- 28
- 29
- 30
- 31
- 32
- …
- следующая ›
- последняя »
