Ada95 中的线程和信号量

发布于 2024-08-18 01:12:34 字数 71 浏览 12 评论 0原文

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

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

How can I use threads in Ada95? What functions can I use to create, destroy, stop and start them?

How can I use semaphores in this language?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

冷血 2024-08-25 01:12:34

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

Concurrency is built into the language, so you have specific Ada syntax for tasks (i.e. threads) and protected objects (i.e. which are more powerful than semaphores / mutexes / conditional variables). This makes much easier (and less error prone) programming multi-threaded apps in Ada than in other languages like C / Java.

It's not recommended to use semaphores in Ada, protected objects are much more powerful (but you can build semaphores easily using protected objects if needed).

Some small syntax examples. Tasks (and protected objects) can be static...

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;

...or created dynamically

task type My_Task_Type(N : Natural);

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

...

T1 := new My_Task_Type(100);

abort T1;

Much less verbose than other languages (and more maintenable)! See 'new', and 'abort' keywords for managing dynamic tasks, as well as other specialized packages like Ada.Synchronous_Task_Control.

不美如何 2024-08-25 01:12:34

Ada 中线程的术语是“任务”。 Ada 没有直接内置信号量(本身),但在 Google 上搜索“Ada 信号量”之类的内容应该会出现相当多的搜索结果。特别是 AdaPower.com,其中有相当多关于 Ada 中并发编程的内容(就此而言,几乎Ada 中的各种编程)。

Ada's terminology for a thread is a "task". Ada doesn't have semaphores (as such) built directly into the language, but Googling for something like "Ada semaphore" should turn up a fair number of hits. AdaPower.com, in particular, has quite a bit about concurrent programming in Ada (and, for that matter, almost all kinds of programming in Ada).

青衫负雪 2024-08-25 01:12:34

信号量必须通常使用 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 中的线程联系起来。然而,艾达的吸引力有所不同。

Semaphores have to be 'constructed' (rather, custom made) usually using 2 files ( files extensions .adb and .ads), sophisticated semaphores may need 3 files (see 'Concurrent and Real-Time Programming in Ada' Alan Burns and Andy Wellings). There are no threads, but rather tasks in Ada.

For synchronisation in Ada using semaphores, you may see an article on my blogspot ! http://3chevrons.blogspot.com/2010/02/semaphores-in-ada.html

I get a feel that you are trying to relate Ada to concurrency in C and/or threads in Python. However, Ada appeals somewhat differently.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文