void reverse_string(char* string, int str_size) {
char tmp;
int i = 0;
int j = str_size - 1;
while (i < j) {
tmp = string[i];
string[i] = string[j];
string[j] = tmp;
++i;
--j;
}
}
我认为这个函数是可重入的,因为它不使用任何全局变量。它仅修改参数。
我的问题是:
该函数可重入吗?
如果可以,我的论点够吗?
提前致谢
最佳答案
是的,这是可重入函数。可重入函数定义为在它们自己执行时(由于递归或并发性)可以调用的函数。在这种情况下,递归是没有意义的,并且您同时安全(假设参数不同)。
您的论点很好-没有显式或隐式访问全局或共享状态,因此可确保重入。这是您的显式代码和C的语义的组合。其他语言和API可能没有此属性。
编辑:仔细检查后,ISO C标准似乎并未强制strlen的线程安全。这样,您极有可能使用带有非线程安全strlen的C标准库,并因此从中继承非可重入。