就像标题所说:
如果我有一个带有静态成员函数的类,它本身不包含静态变量,我可以认为成员函数是可重入的吗?
答案 0 :(得分:4)
静态成员函数与名称空间作用域函数(甚至成员函数)在重入性方面没有区别。它们不是倾向于任何一种方式,它完全取决于函数内部的作用。
答案 1 :(得分:3)
Wikipedia article on Reentrancy中规定的可重入规则如下:
所以只要成员函数遵循这些规则就可以了。
文章Use reentrant functions for safer signal handling我觉得有一个更好的解释:
可重入函数是可由多个任务使用的函数 同时不用担心数据损坏。相反,a 非重入函数是不能由多个函数共享的函数 除非通过以下方式确保对功能的互斥 使用信号量或在关键部分禁用中断 代码可以在任何时间中断可重入函数 稍后恢复而不会丢失数据。可重入的功能 在全局变量时使用局部变量或保护其数据 使用。
可重入函数:
- 不能通过连续调用保存静态数据
- 不返回指向静态数据的指针;所有数据均由函数调用者提供
- 使用本地数据或通过制作本地数据来保护全局数据
- 不得调用任何非重入函数
然后继续解释在完全发表文章之前这与线程安全的区别。
答案 2 :(得分:0)
如果静态成员函数仅包含自动变量,则可以认为它是可重入的。