4

如何在 Ada95 中使用线程?我可以使用哪些函数来创建、销毁、停止和启动它们?

如何在这种语言中使用信号量?

4

3 回答 3

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。

于 2010-01-15T12:57:48.717 回答
4

Ada 对线程的术语是“任务”。Ada 没有直接内置于语言中的信号量(因此),但谷歌搜索类似“Ada semaphore”的东西应该会出现相当多的点击量。尤其是AdaPower.com,有很多关于 Ada 中的并发编程(以及,就此而言,几乎所有类型的 Ada 编程)。

于 2010-01-14T15:34:50.930 回答
4

信号量必须“构建”(而不是定制),通常使用 2 个文件(文件扩展名为 .adb 和 .ads),复杂的信号量可能需要 3 个文件(参见“Ada 中的并发和实时编程”Alan Burns 和 Andy Wellings )。在 Ada 中没有线程,而是任务。

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

我感觉您正试图将 Ada 与 C 中的并发和/或 Python 中的线程联系起来。然而,艾达的诉求有所不同。

于 2010-02-28T10:09:32.537 回答