POSIX 取消点应该如何表现?

2023-12-26

我一直在研究 glibc/nptl 取消点的实现,并将其与 POSIX 进行比较,除非我弄错了,否则它是完全错误的。使用的基本模型是:

int oldtype = LIBC_ASYNC_CANCEL(); /* switch to asynchronous cancellation mode */
int result = INLINE_SYSCALL(...);
LIBC_CANCEL_RESET(oldtype);

根据 POSIX:

在函数调用期间挂起时根据取消请求采取行动的副作用与单线程程序中当函数调用被信号和给定中断时可能出现的副作用相同。函数返回[EINTR]。任何此类副作用都会在调用任何取消清理处理程序之前发生。

我对这段话的解读是,如果我打电话open,我可以期待either在无法打开文件之前被取消(以及我的整个线程),or返回有效的文件描述符或 -1 和errno值,但永远不要创建一个新的文件描述符然后将其丢失。另一方面,取消点的 glibc/nptl 实现似乎允许竞争条件,其中取消请求发生在系统调用返回之后但之前LIBC_CANCEL_RESET发生。

我是疯了,还是他们的实施真的这么糟糕?如果是这样,POSIX 是否允许这种破坏行为(这似乎使取消完全无法使用,除非您手动推迟),或者他们只是公然忽略 POSIX?

如果这种行为实际上被破坏了,那么在没有这种竞争条件的情况下实现它的正确方法是什么?


标准的下一段不是澄清了这一点吗:

但是,如果线程挂起于 取消点和事件 它正在等待发生在 取消请求被执行,它 未指定是否 取消请求已采取行动或 是否取消请求 保持挂起状态并且线程恢复 正常执行。

这意味着这种竞争条件是完全合法的行为。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

POSIX 取消点应该如何表现? 的相关文章

  • 没有 Unicode 字节顺序标记。无法切换到 Unicode

    我正在使用 XSD 编写 XML 验证器 下面是我所做的 但是当验证器到达该线时while list Read 它给了我错误 没有 Unicode 字节顺序标记 无法切换到 Unicode 有人可以帮我解决吗 public class Va
  • 使用不带参数的 Split() 时,默认分隔符是什么?

    所以我看了看String Split 今天 C 中的方法 我意识到你也可以向它传递零参数 这是我从未考虑过的 使用时默认的分隔符是什么Split 没有任何参数 如果没有值 则为空白 来源自here https msdn microsoft
  • 为什么派生类不使用基类的operator=(赋值运算符)?

    以下是实际问题的简化版本 而不是打电话Base operator int 代码似乎生成了一个临时的Derived对象并复制它 既然函数签名似乎完美匹配 为什么不使用基本赋值运算符 这个简化的示例没有显示任何不良影响 但原始代码在析构函数中有
  • 将 C# 反射代码移植到 Metro-Ui

    我正在尝试移植使用反射的现有 C 类 通用工厂 但我无法编译这段代码 Type types Assembly GetAssembly typeof TProduct GetTypes foreach Type type in types i
  • F10键没被抓住

    I have a Windows Form and there overriden ProcessCmdKey However this works with all of the F Keys except for F10 I am tr
  • 使用反射获取基类的受保护属性值

    I would like to know if it is possible to access the value of the ConfigurationId property which is located in the base
  • 用 C# 制作 Vista 风格的应用程序

    我正在运行 Windows Vista 并且希望外观看起来像常规 Vista 程序 有没有关于如何构建 Vista 风格应用程序的真正好的教程 文章 我还想学习如何使用本机代码并将其转换为 C 如this http bartdesmet n
  • 在“using”语句中使用各种类型 (C#)

    自从C usingstatements只是try finally dispose 的语法糖 为什么它接受多个对象仅当它们属于同一类型时 我不明白 因为它们需要的只是 IDisposable 如果它们都实现 IDisposable 应该没问题
  • 使用scanf()时如何区分整数和字符

    我只是使用该功能scanf 代码如下 scanf d a printf d a 当我输入1时 它会像我想要的那样打印1 但即使我输入 1a 它也会像以前一样打印 1 当用户输入非整数时 例如 2 3 12ab 1 a 我想向用户显示 输入整
  • 线程安全的 C++ 堆栈

    我是 C 新手 正在编写一个多线程应用程序 不同的编写者将对象推入堆栈 读者将它们从堆栈中拉出 或至少将指针推入对象 C 中是否有任何内置结构可以在不添加锁定代码等的情况下处理此问题 如果没有 那么 Boost 库呢 EDIT 你好 感谢您
  • QThread - 使用槽 quit() 退出线程

    我想在线程完成运行时通知对象 但是 我无法让线程正确退出 我有以下代码 处理器 cpp thread new QThread tw new ThreadWorker connect tw SIGNAL updateStatus QStrin
  • 为什么重载方法在 ref 仅符合 CLS 方面有所不同

    公共语言规范对方法重载非常严格 仅允许根据其参数的数量和类型来重载方法 如果是泛型方法 则根据其泛型参数的数量进行重载 根据 csc 为什么此代码符合 CLS 无 CS3006 警告 using System assembly CLSCom
  • 如何在 C# 中使用 XmlDsigC14NTransform 类

    我正在尝试使用规范化 xml 节点System Security Cryptography Xml XMLDsigC14nTransformC net Framework 2 0 的类 该实例需要三种不同的输入类型 NodeList Str
  • C# 中处理 SQL 死锁的模式?

    我正在用 C 编写一个访问 SQL Server 2005 数据库的应用程序 该应用程序是数据库密集型的 即使我尝试优化所有访问 设置适当的索引等 我预计迟早会遇到死锁 我知道为什么会发生数据库死锁 但我怀疑我能否在某个时候发布不发生死锁的
  • 如何将 CSV 文件读入 .NET 数据表

    如何将 CSV 文件加载到System Data DataTable 根据CSV文件创建数据表 常规 ADO net 功能是否允许这样做 我一直在使用OleDb提供者 但是 如果您正在读取具有数值的行 但希望将它们视为文本 则会出现问题 但
  • 将一个 long 转换为两个 int 以进行重构

    我需要将一个参数作为两个 int 参数传递给 Telerik Report 因为它不能接受长参数 将 long 拆分为两个 int 并在不丢失数据的情况下重建它的最简单方法是什么 使用掩蔽和移位是最好的选择 根据文档 long 保证为 64
  • 在何处将 CFLAG(例如 -std=gnu99)添加到 (Eclipse CDT) 自动工具项目中

    我有一个简单的 Autotools C 项目 不是 C 其框架是由 Eclipse CDT Juno 为我创建的 CFLAG 通过检查 似乎是 g O2 我希望所有生成的 make 文件也具有 std gnu99附加到 CFLAG 因为我使
  • 通过 cmake 链接作为外部项目包含的 opencv 库[重复]

    这个问题在这里已经有答案了 我对 cmake 比较陌生 经过几天的努力无法弄清楚以下事情 我有一个依赖于 opencv 的项目 它本身就是一个 cmake 项目 我想静态链接 opencv 库 我正在做的是我的项目中有一份 opencv 源
  • 创建带有部分的选项卡式侧边栏 WPF

    我正在尝试创建一个带有部分的选项卡式侧边栏 如 WPF 中的以下内容 我考虑过几种方法 但是有没有更简单 更优雅的方法呢 方法一 列表框 Using a ListBox并将 SelectedItem 绑定到右侧内容控件所绑定的值 为了区分标
  • 如何从函数返回矩阵(二维数组)? (C)

    我创建了一个生成宾果板的函数 我想返回宾果板 正如我没想到的那样 它不起作用 这是函数 int generateBoard int board N M i j fillNum Boolean exists True initilize se

随机推荐

  • 子进程返回码中的Python“return not”语句

    我刚刚在Python中遇到了一行非常奇怪的代码 self myReturnCode externalProcessPopen returncode return not self myReturnCode 究竟是什么return not代表
  • 当有新更新可用时,Angular 4 PWA Service Worker 不会更新

    在我更新 Angular 4 PWA 应用程序并部署后 用户无法获得新的更新 直到用户清除缓存并刷新浏览器 Sw不更新 即使我按下 crome Dev 中的更新按钮 它也不会更新 我必须清除缓存并刷新浏览器 我用过这些包 Angular s
  • Discord 机器人:修复“找不到 FFMPEG”

    我想让我的 Discord 机器人加入语音聊天 但每次我这样做时 我都会在 log cmd 中收到错误消息 FFMPEG not found 请帮我 错误图片 这是代码 client on message message gt Voice
  • pymysql无法连接mysql

    我正在尝试使用 pymsql 连接到 MySQL 数据库 主机是 115 28 236 225 并使用默认端口 3306 代码如下 db connect py import pymysql def connDB conn pymysql c
  • jQuery悬停不适用于动态元素

    我从数据库中获取数据 并根据匹配的数量 我想输出 div img src images account related icons link delete png div 我希望该图像在悬停时发生变化 所以我使用以下代码 link dele
  • 空终止字符串的基本原理是什么?

    尽管我非常喜欢 C 和 C 但我还是忍不住对空终止字符串的选择感到摸不着头脑 长度前缀 即 Pascal 字符串在 C 之前就已存在 长度前缀字符串通过允许恒定时间长度查找使多种算法更快 带长度前缀的字符串更难以导致缓冲区溢出错误 即使在
  • Keycloak授权:向域对象或实体添加角色

    我是 Keycloak 框架的新手 在痛苦地编写了自己的解决方案之后 我们希望转换为 KeyCloak 这似乎是一个很有前途的解决方案 但不幸的是缺乏自我描述文档 我已经阅读了教程和术语 但是 我似乎无法通过 Keycloak 概念为我的授
  • R绘图隐式函数外部命令

    我想绘制 x 和 y 的隐式函数 1 0 125 y 2 x 2 0 005我知道它可以绘制为等值线图 但使用 外部 命令时遇到问题 在下面的 x lt seq 0 4 1 01 length 1000 y lt seq 0 3 lengt
  • 是否可以在 ASP.NET MVC FilterAttribute 上使用依赖注入/IoC?

    我有一个简单的习惯FilterAttribute我用它来装饰各种ActionMethods eg AcceptVerbs HttpVerbs Get MyCustomFilter public ActionResult Bar 现在 我希望
  • 为什么 TaskFactory.StartNew 收到 CancellationToken [重复]

    这个问题在这里已经有答案了 可能的重复 任务构造函数中的取消标记 为什么 https stackoverflow com questions 3712939 cancellation token in task constructor wh
  • 如何在 Windows 7 上安装幽灵

    有谁知道 也许是所有相关步骤 如何在 Windows 7 上运行 安装 Wraith 文档 http bbc news github io wraith index html 安装 http bbc news github io wrait
  • 从图像中裁剪椭圆

    我想从图像中提取椭圆区域 图像中面部部分的一部分 最好在 MATLAB 中 例如 在此图像中 我想提取红色边界内的区域 谁能帮我这个 裁剪很容易 您所要做的就是应用适当的蒙版 诀窍是创建这样一个蒙版 假设A是你的图像 试试这个 Create
  • 为什么将整数与长度为 1 的数组进行比较会返回 true,而与长度为 2 或更大的数组进行比较会返回 false?

    为什么将 0 与长度为 1 的数组进行比较会返回 true 而对于长度为 2 或更大的数组则返回 false 例如 var a undefined 0 a a returns false a push 1 1 0 a a returns t
  • 将图外的点设置为上限

    也许这个问题已经存在 但我找不到它 我正在用 Python 绘制散点图 出于说明目的 我不想设置我的轴 范围以包含所有点 可能有一些非常高或非常低的值 而我在这些点中关心的是它们存在 也就是说 它们需要位于情节中 但不是其实际价值 相反 位
  • 实体框架 4 - 从模型更新数据库架构。不擦除表数据

    我正在开发一个新项目 在该项目中我可以使用 Entity Framework 4 从模型到数据库方法进行工作 我正在从事的项目采用敏捷方法 随着时间的推移将推出不同的阶段 模型优先方法适合我的情况吗 我注意到 当您 从模型生成数据库 时 它
  • 核心数据:在一对多关系中按计数排序

    我目前正在尝试设置一个 NSFetchedResultsController 它将根据一对多关系中的实体数量对表视图进行排序 我不确定这在计数时是否会产生影响 但这也是一种反比关系 我认为这样的事情会很好地工作 NSEntityDescri
  • 如何在Oracle Merge语句中使用useparallel(10)提示

    我们如何在oracle merge语句中使用并行 10 提示 我对提示有点陌生 想知道这是否可以用于合并语句 简而言之 首先 必须在服务器上启用并行执行 您需要检查以下3个参数 select name value from v parame
  • 向 macOS Mojave LaunchDaemon 授予相机权限

    我编写了一个 macOS Mojave LaunchDaemon 它会触发 shell 脚本来运行图像快照 https github com rharder imagesnap程序 目的是每秒从相机捕获一张静态图像 问题 守护进程失败并出现
  • Javascript存储在会话中,从python/flask中的会话中获取

    我正在使用 Flask 应用程序 并尝试使用 javascript 存储 Json 对象 并在 python 中检索它 因为我想将用户生成的一种 购物清单 信息存储到我的数据库中 该对象出现在我的浏览器会话存储中 但似乎我的语法已关闭 因为
  • POSIX 取消点应该如何表现?

    我一直在研究 glibc nptl 取消点的实现 并将其与 POSIX 进行比较 除非我弄错了 否则它是完全错误的 使用的基本模型是 int oldtype LIBC ASYNC CANCEL switch to asynchronous