这个函数是可重入的吗?

Qui*_*ncy 1 c++ reentrancy

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;
    }
}
Run Code Online (Sandbox Code Playgroud)

我认为这个函数是可重入的,因为它不使用任何全局变量.它只修改参数.

我的问题是:这个函数是可重入的吗?如果是的话,我的论点是否足够好?

提前致谢

Ada*_*ght 14

是的,这是一个可重入的功能.可重入函数被定义为在它们自己执行时可以被调用的函数(由于递归或并发).在这种情况下,递归是没有意义的,并且您同时是安全的(假设参数不同).

你的论点很好 - 没有明确或隐含地访问全局或共享状态,因此确保了重入.这是您的显式代码和C的语义的组合.其他语言和API 可能没有此属性.

编辑:在仔细检查时,ISO C标准似乎不会强制strlen的线程安全.因此,您很可能使用具有非线程安全strlen的C标准库,因此,继承了它的非重入性.


Ric*_*dle 11

是的,你是对的,它是可重入的.它只影响其参数及其局部变量.

不同实例可能会干扰的唯一方法是将指针传递给同一个缓冲区.

在维基百科上有一个很好的折返定义,你的功能明显符合所有条款.