Ada95中的线程和信号量

sza*_*man 3 multithreading semaphore ada

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

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

San*_*ago 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;
Run Code Online (Sandbox Code Playgroud)

...或动态创建

task type My_Task_Type(N : Natural);

task body My_Task_Type(N : Natural) is ...

...

T1 := new My_Task_Type(100);

abort T1;
Run Code Online (Sandbox Code Playgroud)

比其他语言(更可维护)更简洁!请参阅'new'和'abort'关键字以管理动态任务,以及其他专用包,如Ada.Synchronous_Task_Control.