Ada95中的线程和信号量

时间:2010-01-14 15:22:26

标签: multithreading semaphore ada

如何在Ada95中使用线程?我可以用什么功能来创建,销毁,停止和启动它们?

我如何使用这种语言的信号量?

3 个答案:

答案 0 :(得分:11)

并发内置于语言中,因此您对任务(即线程)和受保护对象(即比信号量/互斥/条件变量更强大)具有特定的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。

答案 1 :(得分:3)

Ada的线程术语是“任务”。 Ada没有直接构建在语言中的信号量(如此),但谷歌搜索“Ada信号量”之类的东西应该会出现相当多的点击量。特别是AdaPower.com在Ada中有很多并发编程(对于Ada来说,几乎所有类型的编程都是如此)。

答案 2 :(得分:3)

信号量必须通过使用2个文件(文件扩展名.adb和.ads)来“构建”(而非定制),复杂的信号量可能需要3个文件(请参阅“Ada中的并发和实时编程”Alan Burns和安迪威灵斯)。在Ada中没有线程,而是任务。

要使用信号量在Ada中进行同步,您可能会在我的blogspot上看到一篇文章! http://3chevrons.blogspot.com/2010/02/semaphores-in-ada.html

我觉得你试图将Ada与C和/或Python中的线程中的并发相关联。然而,Ada的呼吁略有不同。