Основы программирования в Linux
Шрифт:
В новом потоке вы ждете семафор и затем подсчитываете символы ввода:
Пока семафор установлен, вы ждете ввода с клавиатуры. Когда вы получите некоторый ввод, то освобождаете семафор, разрешив второму потоку сосчитать символы перед тем, как первый поток начнет снова считывать ввод с клавиатуры.
И опять потоки совместно используют один и тот же массив
Дайте программе отработать:
В программах с потоками временные ошибки всегда трудно найти, но программа кажется приспособленной и к быстрому вводу текста, и более неспешным паузам.
Как это работает
Когда вы инициализируете семафор, то задаете ему начальное значение, равное 0. Следовательно, когда запускается функция потока, вызов
В потоке
Неочевидные недочеты в разработке, которые заканчиваются в результате неявными ошибками, легко пропустить. Давайте слегка изменим программу на thread3a.c, так чтобы вводимый с клавиатуры текст временами заменялся автоматически формируемым текстом. Замените цикл чтения в
Теперь, если вы введете
Проблема этой программы заключается в том, что она рассчитывала на то, что ввод текста из программы продлится так долго, что у другого потока хватит времени для подсчета символов до того, как поток
Этот пример показывает, как аккуратны вы должны быть с временными условиями в многопоточных программах. Исправить программу можно, применяя дополнительный семафор для того, чтобы заставить поток
Синхронизация с помощью мьютексов
Другой способ синхронизации доступа в многопоточных программах — применение мьютексов (сокращение от mutual exclusions — взаимные исключения) или исключающих семафоров, которые разрешают программистам "запирать" объект так, что только один поток может обратиться к нему.
Базовые функции, необходимые для использования мьютексов, очень похожи на функции семафоров. Они объявляются следующим образом:
Дневники св. Николая Японского. Том V
Религия и эзотерика:
православие
христианство
религия
рейтинг книги
Ахтимаг
Фантастика:
фэнтези
детективная фантастика
рейтинг книги
Боярич Морозов
3. Наследник старого рода
Фантастика:
героическая фантастика
боевая фантастика
альтернативная история
рейтинг книги
Кодекс Охотника. Книга XXV
25. Кодекс Охотника
Фантастика:
фэнтези
попаданцы
аниме
рейтинг книги
Звезда
Любовные романы:
современные любовные романы
рейтинг книги
Изгнание
Проза:
проза прочее
рейтинг книги