【问题标题】:Threads and semaphores in Ada95Ada95 中的线程和信号量
【发布时间】:2010-01-14 15:22:26
【问题描述】:

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

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

【问题讨论】:

  • 为什么选择 Ada95? .......
  • Tasking,大致类似于线程,是Ada的核心特性,从一开始就是。如果你打算在 Ada 中编程,尤其是并发编程,首先要熟悉它的设计理念和功能,而不是追求“我如何在 Ada 中做语言特性 X?”,你会更成功。方法。 (如果您对 Ada 有经验,则无意冒犯,但不是任务功能 :-) 网络上不乏资源,例如“Ada Distilled”、Ada wikibook、AdaPower 等(查看外部链接来自维基书)。
  • 我没有经验。现在我需要编写一个并发程序来完成我的课程,所以我没有太多时间:)
  • 然后去阅读 Ada Distilled (sigada.org/education/pages/…) 中的“Concurrency with Tasking”一章,或者你的教科书中关于任务的章节。
  • 如果/当您有更多时间时,您可以获得一份“Ada 中的并发(第 2 版)”,Alan Burns/Andy Wellings,ISBN 978-0521629119。

标签: multithreading semaphore ada


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案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 的诉求有所不同。

      【讨论】:

        猜你喜欢
        • 2013-12-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-10-15
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多