如何在 Ada95 中使用线程?我可以使用哪些函数来创建、销毁、停止和启动它们?
如何在这种语言中使用信号量?
并发是内置于语言中的,因此您对任务(即线程)和受保护对象(即比信号量/互斥体/条件变量更强大)具有特定的 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。
Ada 对线程的术语是“任务”。Ada 没有直接内置于语言中的信号量(因此),但谷歌搜索类似“Ada semaphore”的东西应该会出现相当多的点击量。尤其是AdaPower.com,有很多关于 Ada 中的并发编程(以及,就此而言,几乎所有类型的 Ada 编程)。
信号量必须“构建”(而不是定制),通常使用 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 中的线程联系起来。然而,艾达的诉求有所不同。