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标准库,并因此从中继承非可重入。

10-08 08:45