静态成员函数是否可重入?

时间:2014-10-01 12:59:50

标签: c++ reentrancy

就像标题所说:

如果我有一个带有静态成员函数的类,它本身不包含静态变量,我可以认为成员函数是可重入的吗?

3 个答案:

答案 0 :(得分:4)

静态成员函数与名称空间作用域函数(甚至成员函数)在重入性方面没有区别。它们不是倾向于任何一种方式,它完全取决于函数内部的作用。

答案 1 :(得分:3)

Wikipedia article on Reentrancy中规定的可重入规则如下:

  • 可重入代码可能不包含任何静态(或全局)非常量数据。
  • 可重入代码不得修改自己的代码。
  • 可重入代码不得调用不可重入的计算机程序或例程。

所以只要成员函数遵循这些规则就可以了。

文章Use reentrant functions for safer signal handling我觉得有一个更好的解释:

  

可重入函数是可由多个任务使用的函数   同时不用担心数据损坏。相反,a   非重入函数是不能由多个函数共享的函数   除非通过以下方式确保对功能的互斥   使用信号量或在关键部分禁用中断   代码可以在任何时间中断可重入函数   稍后恢复而不会丢失数据。可重入的功能   在全局变量时使用局部变量或保护其数据   使用。

     

可重入函数:

     
      
  • 不能通过连续调用保存静态数据
  •   
  • 不返回指向静态数据的指针;所有数据均由函数调用者提供
  •   
  • 使用本地数据或通过制作本地数据来保护全局数据
  •   
  • 不得调用任何非重入函数
  •   

然后继续解释在完全发表文章之前这与线程安全的区别。

答案 2 :(得分:0)

如果静态成员函数仅包含自动变量,则可以认为它是可重入的。