首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >哪些标准的c++函数和类型支持重入性?

哪些标准的c++函数和类型支持重入性?
EN

Stack Overflow用户
提问于 2020-10-30 11:14:28
回答 1查看 105关注 0票数 1

C++标准(c++14和现行工作草案)指出:

除了在本文档中显式指定的情况外,在C++标准库中可以递归地重新输入哪些函数是实现定义的。

除了互斥之外,我在标准中找不到任何类型或函数,其中显式地指定它可以安全地递归重新输入。即使对于std::recursive_mutex,标准也指出:

没有具体说明一个线程可以获得多少级别的所有权。

我对C++17的问题:

  1. C++标准定义的哪些类型或函数必须以递归重新输入的方式实现?
  2. 可重入代码不能调用不可重入函数(请参阅下面的可重入规则)。考虑到这一点,总结C++代码只有在没有使用C++标准类型或函数的情况下才能安全地重入是正确的吗?

请注意,重入性和线程安全是正交的概念:

在计算中,如果多个调用可以安全地在单个处理器系统上同时运行,则计算机程序或子例程称为可重入程序,其中可在执行过程中中断重入过程,然后在其先前的调用完成执行之前再次安全地调用(“重新输入”)。中断可由内部操作(如跳转或调用)或外部操作(如中断或信号)引起,与递归不同,递归只能由内部调用引起新调用。这种可重入性的定义不同于多线程环境中线程安全的定义。(...)相反,线程安全代码不一定是可重入的(.)

重入规则

可重入代码不能保存任何静态或全局非常量数据。可重入代码不得自行修改。可重入代码不能调用不可重入的计算机程序或例程.

EN

回答 1

Stack Overflow用户

发布于 2020-10-30 12:18:41

  1. C++标准定义的哪些类型或函数必须以递归重新输入的方式实现?

重入是异步信号安全的先决条件.因此,指定为信号安全的函数必须以可重入的方式实现。

support.signal 除非评估包括下列之一,否则它是信号安全的:

  • 调用任何标准库函数,除外,普通无锁原子操作和函数明确标识为信号安全;

普通的无锁原子操作是对atomics函数f的调用,这样:

  • F是函数atomic_­is_­lock_­free(),或
  • F是成员函数is_­lock_­free(),或
  • F是在对象A上调用的非静态成员函数,因此A.is_­lock_­free()生成true,或
  • f是一个非成员函数,对于传递给f的每个指针到原子参数A,atomic_­is_­lock_­free(A)得到真.

因此,那些普通的无锁原子选项必须是可重入的.

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64607289

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档