Ada95でスレッドを使用するにはどうすればよいですか?それらを作成、破棄、停止、および開始するためにどのような関数を使用できますか?
この言語でセマフォを使用するにはどうすればよいですか?
Ada95でスレッドを使用するにはどうすればよいですか?それらを作成、破棄、停止、および開始するためにどのような関数を使用できますか?
この言語でセマフォを使用するにはどうすればよいですか?
並行性は言語に組み込まれているため、タスク(つまりスレッド)と保護されたオブジェクト(つまり、セマフォ/ミューテックス/条件変数よりも強力)に特定のAda構文があります。これにより、C / Javaなどの他の言語よりも、Adaでのマルチスレッドアプリのプログラミングがはるかに簡単になります(エラーが発生しにくくなります)。
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などの他の特殊なパッケージを参照してください。
Adaのスレッドの用語は「タスク」です。Adaには、言語に直接組み込まれたセマフォ(そのようなもの)はありませんが、「Adaセマフォ」のようなものをグーグルで検索すると、かなりの数のヒットが発生するはずです。特に、 AdaPower.comは、Adaでの並行プログラミング(さらに言えば、Adaでのほぼすべての種類のプログラミング)についてかなりの知識を持っています。
セマフォは通常2つのファイル(ファイル拡張子.adbおよび.ads)を使用して「構築」(カスタムメイド)する必要があります。高度なセマフォには3つのファイルが必要な場合があります(「Adaでの同時およびリアルタイムプログラミング」を参照)AlanBurnsおよびAndyWellings )。スレッドはありませんが、Adaにはタスクがあります。
セマフォを使用したAdaでの同期については、私のブログスポットに記事が表示される場合があります。http://3chevrons.blogspot.com/2010/02/semaphores-in-ada.html
AdaをCの並行性やPythonのスレッドに関連付けようとしているように感じます。ただし、Adaのアピールは多少異なります。