Ada 中的信号量

2023-12-04

我得到了以下代码并要求实现一个信号量。

with Ada.Text_IO; use Ada.Text_IO;
with Id_Dispenser;
with Semaphores; use Semaphores;
procedure Philos is
 No_of_Philos : constant Positive := 5;
 Meditation : constant Duration := 0.0;
 type Table_Ix is mod No_of_Philos;
 Forks : array (Table_Ix) of Binary_Semaphore (Initially_Available => True);
 package Index_Dispenser is new Id_Dispenser (Element => Table_Ix);
 use Index_Dispenser;
 task type Philo;
 task body Philo is
  Philo_Nr : Table_Ix;
 begin
  Dispenser.Draw_Id (Id => Philo_Nr);
  Put_Line (“Philosopher” & Table_Ix’Image (Philo_Nr) & “ looks for forks.”);
  Forks (Philo_Nr).Wait; delay Meditation; Forks (Philo_Nr + 1).Wait;
  Put_Line (“Philosopher” & Table_Ix’Image (Philo_Nr) & “ eats.”);
  Forks (Philo_Nr).Signal; Forks (Philo_Nr + 1).Signal;
  Put_Line (“Philosopher” & Table_Ix’Image (Philo_Nr) & “ dropped forks.”);
 end Philo;
 Table : array (Table_Ix) of Philo; pragma Unreferenced (Table);
begin
 null;
end Philos;

该任务需要一个Semaphores包和包Id_Dispenser。我对 Ada 很陌生,但是包是什么意思?这是否意味着规范和主体,或者仅意味着其中之一,我该如何实现这一点?


至于“什么是包”,请查看Ada Wikibook 中的包部分.

所有包装都有规格部分。大多数也有一个主体(如果规范承诺有一个主体,例如通过声明一个子程序,那么实际上必须有一个主体)。

您可以在 Wikibook 中找到有关实现信号量的讨论任务分配部分,包括代码Semaphore_Protected_Type.

在你的情况下,你需要

package Semaphores is
   protected type Binary_Semaphore (Initially_Available : Boolean) is
      entry Wait;
      procedure Signal;
   private
      Available : Boolean := Initially_Available;
   end Binary_Semaphore;
   ...
end Semaphores;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Ada 中的信号量 的相关文章

  • Ada - 提出可访问性检查

    我从Github下载了这个程序 https github com raph amiard ada synth lib https github com raph amiard ada synth lib 我尝试了第一个例子 但遇到了一个例外
  • 为什么字符串需要用初始值初始化?

    我有一根绳子lx String我想稍后在代码中设置该值 但出现错误unconstrained subtype not allowed need initialization provide initial value or explicit
  • 什么是“libgnarl”?

    What is libgnarl 我在不同的地方找到了对此的引用 例如在 gcc 源代码中或 gprbuild 的详细输出中 gprbuild 特别报告了有关决定是否libgnarl甚至是必要的 所以它显然是一个可选库 但实际的库是什么 我
  • 如何阻止控制台窗口立即关闭 | GNAT-GPS

    我有 Ada 程序 可以使用 GNAT GPS 完美运行和编译 当我运行其 exe 文件并提供用户输入时 该 exe 会立即关闭 而不是说 按任意键继续 我在网上搜索了很多 但我只找到了与使用 system pause 的 c c visu
  • Ada 中类型/包别名的单独声明

    我想声明一些 用户定义的编译器常量 以使我的规范文件尽可能保持 常量 这在 C 中很常见 例如 misc config hh namespace misc typedef std shared ptr a A ptr namespace a
  • C# 中的互斥量和信号量是什么?我们需要在哪里实施? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 C 中的互斥量和信号量是什么 我们需要在哪里实施 我们如何在多线程中使用它们 您应该从 MSDN 开始 系统 线程 互斥体 http
  • Java - 信号量释放而不获取

    我有一些线程 它们被赋予随机数 1 到 n 并被指示按排序顺序打印它们 我使用信号量 这样我获取的许可证数量 随机数 并释放比获取的许可证多的许可证 获得 随机数 释放 1 随机数 信号量的初始许可计数为 1 因此随机数为 1 的线程应该获
  • TPL 数据流与普通信号量

    我需要制定一个可扩展的流程 该进程主要有 I O 操作和一些次要的 CPU 操作 主要是反序列化字符串 该流程在数据库中查询 url 列表 然后从这些 url 中获取数据 将下载的数据反序列化为对象 然后将部分数据保存到 crm 动态以及另
  • 使用一个字段创建 Ada 记录

    我定义了一个类型 type Foo is record bar Positive end record 我想创建一个返回记录实例的函数 function get foo return Foo is return 1 end get foo
  • 从大端数据中提取记录

    我有以下用于网络协议实现的代码 由于协议是大端 我想使用位顺序属性和高阶优先值 但看来我犯了一个错误 With Ada Unchecked Conversion with Ada Text IO use Ada Text IO with S
  • 在等待挂起操作取消时处置 SemaphoreSlim 是否安全?

    我必须使用 SemaphoreSlim 来确保对代码某些部分的单线程访问 并且希望确保我正确处理所有内容 假设我有以下课程 public class Foo private readonly CancellationTokenSource
  • Ada:Windows 上的 cmake 和 PLplot 安装

    这是该帖子的后续内容Ada 绘制二维图 https stackoverflow com questions 3210207 ada plotting 2d graphs 我决定创建一个新帖子 因为这是一个单独的问题 Windows 版 PL
  • 信号量 P 和 V 操作是原子操作吗?

    可以在信号量上执行的 P 和 V 操作是否保证原子操作 信号量可以防止两个进程进入 P 吗 假设我们有一个二进制信号量 s 其值为 1 并且两个进程同时尝试在 s 上执行 P 这些操作中只有一个能够在 s 上的下一个 V 操作之前完成 尝试
  • 从 Ada 访问 c 常量

    我有一个带有这样类型定义的头文件 ifndef SETSIZE define SETSIZE 32 endif typedef struct set unsigned array SETSIZE set t 要使用相应的 C 函数 我需要在
  • 确定 Ravenscar 程序中堆栈使用情况的最佳实践

    我正在使用 Ravenscar 子集编写一个 Ada 程序 因此 我知道执行时正在运行的任务数量 该代码是由 gcc 编译的 fstack check https gcc gnu org onlinedocs gnat ugn Stack
  • 使用 GtkAda 发出信号

    我担心的是我创建了一个回调函数 它应该显示Gtk Entry当我们点击Gtk Button但当我点击按钮时什么也没有发生 我不明白 File ads Package Test is Type T Test is record Contene
  • 让 Ada(用 GNAT 编译)从当前目录外部导入文件?

    我正在大学学习编程入门课程 选择的语言是 Ada 我正在 Kate 中编码并使用 GNAT 4 6 3 进行编译 我们必须为我们的程序使用教师提供的库 如下所示 with foo use foo 当然 然后文件foo adb必须包含在与我的
  • 如何证明这个不变量呢?

    我的目的是证明霍纳规则是正确的 为此 我将霍纳当前计算的值与 实 多项式的值进行比较 所以我写了这段代码 package body Poly with SPARK Mode is function Horner X Integer A Ve
  • 防止 Ada DLL 中的名称损坏

    有没有一种简单的方法可以防止在创建 Ada DLL 时 Ada 名称被破坏 这是我的 adb 代码 with Ada Text IO package body testDLL is procedure Print Call is begin
  • 对于匿名访问类型重载运算符“=”?

    我正在读巴恩斯那本出色的 艾达 一书 这是第 11 7 节中用于深度比较链表的代码示例 type Cell is record Next access Cell Value Integer end record function L R a

随机推荐

  • VBA Excel 变量对多个键/顺序进行排序

    如何同时对多个列 键 订单 进行排序 当我运行下面的代码时 它会在执行每一行时对数据重新排序 而不是在排序中对多列进行排序 将 密钥 或 订单 编号从 1 更改为 2 等没有帮助 谢谢 wsLast Row Cells Rows Count
  • javascript数组的总和返回所有数字的字符串连接[关闭]

    Closed 这个问题是无法重现或由拼写错误引起 目前不接受答案 我有一个由 ajax 获取的 php json encode 对象 我想做的就是对这个数组求和 这是我到目前为止所做的 var json parseJSON data var
  • 如何在Tensorflow中设置分层学习率?

    我想知道是否有一种方法可以像 Caffe 中那样对不同层使用不同的学习率 我正在尝试修改预先训练的模型并将其用于其他任务 我想要的是加快新添加层的训练速度 并将训练后的层保持在较低的学习率 以防止它们被扭曲 例如 我有一个 5 卷积层的预训
  • 当服务打开时,如何强制应用程序选择退出省电模式?

    预期的行为是应用程序在处于开启状态时将始终运行 当应用程序一段时间不活动时 某些手机会将应用程序置于后台模式 我希望应用程序始终运行 即使处于待机模式 待机模式意味着当我们按下主页按钮时 应用程序将进入后台 并且它将运行一段时间 我找到了以
  • 配置按键重复延迟以检测按键是否被按下

    我正在用 C 语言编写一个程序 它使用 ncurses 来检查是否按下了某个键 问题是按键重复有延迟 例如 如果我在终端中按住 a 键 则在重复输入 a 之前会有短暂的延迟 我希望能够知道它是否是从实际按下的位置按下的 在终端中如何暂时将此
  • opengles 在 iPhone 中显示人脸

    我需要将人类 2D 脸部制作为 3D 脸部 我用了这个链接加载 obj 文件并映射纹理 此示例仅适用于立方体和金字塔 我加载了人脸 obj 文件 This loads the obj file and can get the human f
  • Spring 对每个未经授权的 HTTP POST 返回 HTTP 405

    Spring 似乎没有正确路由 授权 HTTP POST 请求 当我发送 HTTP POST 请求时 我总是收到 405 Method Not allowed 响应 并在日志文件中显示 org springframework web ser
  • Jquery 数据表排序不适用于日期列?

    我有一个 jquery 数据表 其中日期列格式为 2018 年 2 月 16 日 但是当它排序时 它没有正确排序 我已经使用了提到的所有与日期相关的列类型Here 但似乎没有任何作用 我该如何解决 这是代码 div class panel
  • 列表追加到 pandas 单元格中

    我有一个数据框 其中包含列中的列表项 例子 df column1 column2 column3 1 c d 2 x 3 foo car 所以我想将另一个项目附加到第3列中 结果应该是这样的 column1 column2 column3
  • 如何使用 SimpleXML 解析 XML 并忽略错误

    我的 xml 文档经常包含错误 无论如何 我想解析我的文档直至出现错误或尝试自动修复错误 那可能吗 我已经尝试过这个 但它不起作用 xml simplexml load file url SimpleXMLElement array LIB
  • 基本矩阵的投影矩阵

    我已经获得了两个摄像机之间的基本矩阵 我也有他们的内部参数3 X 3我之前通过棋盘获得的矩阵 使用基本矩阵 我得到了P1 and P2 by P1 I 0 and P2 e x F e 这些投影矩阵对于获取精确的 3D 位置并没有真正的用处
  • 使用 python-pptx 从现有图表中读取图表数据

    我想使用 python pptx 库从演示文稿中的图表中读取数据 我已经看过替换图表数据的文档 但我不知道如何读取数据 图表数据为 图表的图表类型 它的类别名称 以及可能的层次结构 它的系列名称 及其系列值 这些可在绘图级别使用 例如 gt
  • 如何将 Objective-C 函数作为回调传递给 C 函数?

    我想从 Objective C 调用 C 函数并将 Objective C 函数作为回调传递 问题是这个函数有一个回调作为参数 所以我必须将 Objective C 函数作为回调传递给 c 函数 这是c函数的头文件 struct mg co
  • 带有上传附件选项的文本区域 HTML/JQuery

    我创建了文本区域 允许用户输入文本 如下所示
  • Microsoft VS C++ 编译器可以从临时对象初始化引用是否是一个错误[重复]

    这个问题在这里已经有答案了 可能的重复 将临时绑定到左值引用 使用VS2008 C 编译器 编译代码无编译错误 class A int main A a ref A return 0 我相信 C 标准 C 2003 和即将推出的 C 0x
  • R:条形图高度必须是向量或矩阵[重复]

    这个问题在这里已经有答案了 我正在尝试使用分组条形图制作条形图 但出现此错误 高度 必须是向量或矩阵 我不知道为什么 我的代码是 rebDef sample 50 100 14 replace F rebOf sample 20 40 14
  • 如何让模拟器与我的电脑处于同一网络?

    我在 NET 4 Visual Studio 2010 中创建了一些 Web API 方法 现在已将其移植到 VS 2013 RC 我想使用 RestSharp 从 Windows CE Compact Framework 应用程序中使用它
  • Spark 2.2 Scala DataFrame 从字符串数组中选择,捕获错误

    我是 SparkSQL Scala 的新手 正在努力完成一些看似简单的任务 我正在尝试从 Scala 字符串数组构建一些动态 SQL 我正在尝试在 DataFrame 中重新输入一些列 但直到运行时我才能看到 DataFrame 中的列集时
  • 如何自动测量两台主机之间的带宽使用情况

    我有一个具有 TCP 客户端和服务器的应用程序 我在不同的机器上设置客户端和服务器 现在我想测量消耗了多少带宽 在应用程序的单次运行期间发送和接收的字节数 我发现wireshark就是这样一个可以帮助我获得统计数据的工具 然而 wiresh
  • Ada 中的信号量

    我得到了以下代码并要求实现一个信号量 with Ada Text IO use Ada Text IO with Id Dispenser with Semaphores use Semaphores procedure Philos is