C++标准(c++14和现行工作草案)指出:
除了在本文档中显式指定的情况外,在C++标准库中可以递归地重新输入哪些函数是实现定义的。
除了互斥之外,我在标准中找不到任何类型或函数,其中显式地指定它可以安全地递归重新输入。即使对于std::recursive_mutex,标准也指出:
没有具体说明一个线程可以获得多少级别的所有权。
我对C++17的问题:
请注意,重入性和线程安全是正交的概念:
在计算中,如果多个调用可以安全地在单个处理器系统上同时运行,则计算机程序或子例程称为可重入程序,其中可在执行过程中中断重入过程,然后在其先前的调用完成执行之前再次安全地调用(“重新输入”)。中断可由内部操作(如跳转或调用)或外部操作(如中断或信号)引起,与递归不同,递归只能由内部调用引起新调用。这种可重入性的定义不同于多线程环境中线程安全的定义。(...)相反,线程安全代码不一定是可重入的(.)
可重入代码不能保存任何静态或全局非常量数据。可重入代码不得自行修改。可重入代码不能调用不可重入的计算机程序或例程.
发布于 2020-10-30 12:18:41
重入是异步信号安全的先决条件.因此,指定为信号安全的函数必须以可重入的方式实现。
support.signal 除非评估包括下列之一,否则它是信号安全的:
普通的无锁原子操作是对atomics函数f的调用,这样:
因此,那些普通的无锁原子选项必须是可重入的.
https://stackoverflow.com/questions/64607289
复制相似问题