如何在Ada95中使用线程?我可以用什么功能来创建,销毁,停止和启动它们?
我如何使用这种语言的信号量?
答案 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的呼吁略有不同。