Нитки и семафоры в Ada95 - PullRequest
       16

Нитки и семафоры в Ada95

3 голосов
/ 14 января 2010

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

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

Ответы [ 3 ]

11 голосов
/ 15 января 2010

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

3 голосов
/ 28 февраля 2010

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

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

Мне кажется, что вы пытаетесь связать Аду с параллелизмом в C и / или потоками в Python. Однако Ада апеллирует несколько иначе.

3 голосов
/ 14 января 2010

Терминология Ады для потока - это «задача». Ада не имеет семафоров (как таковых), встроенных непосредственно в язык, но поиск в Google для чего-то вроде «семафор Ада» должен привести к значительному числу обращений. AdaPower.com * В частности, 1002 * рассказывает о параллельном программировании в Аде (и, в этом отношении, почти во всех видах программирования в Аде).

...