Потоки и семафоры в Ada95
-
20-09-2019 - |
Вопрос
Как я могу использовать потоки в Ada95?Какие функции я могу использовать для их создания, уничтожения, остановки и запуска?
Как я могу использовать семафоры на этом языке?
Решение
Терминология Ады для обозначения потока — это «задача».В Ada нет семафоров (как таковых), встроенных непосредственно в язык, но поиск в Google чего-то вроде «семафора Ады» должен привести к изрядному количеству совпадений. AdaPower.com, в частности, довольно много рассказывает о параллельном программировании на Ada (и, если уж на то пошло, почти обо всех видах программирования на Ada).
Другие советы
Параллелизм встроен в язык, поэтому у вас есть специальный синтаксис Ada для задач (т.потоки) и защищенные объекты (т.е.которые более мощны, чем семафоры/мьютексы/условные переменные).Это значительно упрощает (и снижает вероятность ошибок) программирование многопоточных приложений на Ada, чем на других языках, таких как C/Java.
Не рекомендуется использовать семафоры в Ada, защищенные объекты гораздо мощнее (но при необходимости вы можете легко создавать семафоры, используя защищенные объекты).
Несколько небольших примеров синтаксиса.Задачи (и защищаемые объекты) могут быть статическими...
task My_Task;
task body My_Task is
begin
-- Just print this to stdout and exit thread
Ada.Text_IO.Put_Line("Hello, concurrent World!");
end;
...или создается динамически
task type My_Task_Type(N : Natural);
task body My_Task_Type(N : Natural) is ...
...
T1 := new My_Task_Type(100);
abort T1;
Гораздо менее многословен, чем другие языки (и более удобен в обслуживании)!См. ключевые слова «new» и «abort» для управления динамическими задачами, а также другие специализированные пакеты, такие как Ada.Synchronous_Task_Control.
Семафоры должны быть «созданы» (скорее, созданы по индивидуальному заказу), обычно с использованием 2 файлов (расширения файлов .adb и .ads), для сложных семафоров может потребоваться 3 файла (см. «Параллельное программирование и программирование в реальном времени на Ada» Алан Бернс и Энди Веллингс). ).В Аде нет потоков, а есть задачи.
О синхронизации в Ada с использованием семафоров можно прочитать в статье в моем блоге! http://3chevrons.blogspot.com/2010/02/semaphores-in-ada.html
У меня такое ощущение, что вы пытаетесь связать Ada с параллелизмом в C и/или потоками в Python.Однако Ада привлекает несколько иначе.