2010-01-14 3 views
1

Как использовать потоки в Ada95? Какие функции я могу использовать для создания, уничтожения, остановки и запуска их?Нитки и семафоры в Ada95

Как использовать семафоры на этом языке?

+0

Почему Ada95? ....... –

+3

Задача, примерно аналогичная потоку, является основной особенностью Ada и была с самого начала. Если вы планируете программировать в Ada, особенно в параллельном программировании, вы будете намного успешнее, сначала ознакомившись с его философией дизайна и возможностями, а не преследуя «Как мне сделать функцию языка X в Ada?» подход. (Не было совершено преступления, если у вас есть опыт работы с Ada, но только не с задачами :-) В Интернете нет недостатка ресурсов, таких как «Ada Distilled», Ada wikibook, AdaPower и т. Д. (Проверьте внешний ссылки из wikibook). –

+0

Я не переживаю. Прямо сейчас мне нужно написать параллельную программу, чтобы мои классы были завершены, поэтому у меня много времени :) – szaman

ответ

2

Термин «Ада» для потока - это «задача». У Ada нет семафоров (как таковых), встроенных непосредственно в язык, но Googling для чего-то вроде «семафора Ada» должен появиться в большом количестве хитов. AdaPower.com, в частности, довольно много говорит о параллельном программировании в Ada (и, если на то пошло, практически все виды программирования в Ada).

10

Параллелизм встроен в язык, поэтому у вас есть специфический синтаксис 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; 

Гораздо менее многословным, чем в других языках (и более maintenable)! Смотрите ключевые слова «новый» и «прервать» для управления динамическими задачами, а также другие специализированные пакеты, такие как Ada.Synchronous_Task_Control.

1

Семафоры должны быть «сконструированы» (скорее, на заказ), обычно используя 2 файла (расширения файлов .adb и .ads), сложным семафорам может потребоваться 3 файла (см. «Параллельное и программирование в реальном времени в Ada» Alan Бернс и Энди Веллингс). В Аде нет потоков, а скорее задач.

Для синхронизации в Ada с помощью семафоров вы можете увидеть статью о моем блоге! http://3chevrons.blogspot.com/2010/02/semaphores-in-ada.html

Я чувствую, что вы пытаетесь связать Ada с параллелизмом в C и/или потоках в Python. Однако Ада обращается несколько иначе.

Смежные вопросы