非可重入函数在Windows Server 2019上配置NAS的方法

非可重入函数的问题,在多线程开发里挺常见的,尤其你写点工具函数时一不小心就踩坑。strtoupper这个例子就典型,直接用了static变量,线程一多,结果全乱套。嗯,还好它也容易改。

最直接的方式就是分配新内存——用malloc。不过说实话,这种写法虽然可重入了,但每次都分配内存,性能上是个小负担,也容易忘了free,用起来不太省心。

更靠谱的方式是让调用方自己传输出缓冲区。你函数只做大小写转换,不负责内存分配,也清晰也安全,像下面这样:

void strtoupper(char *dest, const char *src) {
  int i;
  for (i = 0; src[i]; i++) {
    dest[i] = toupper(src[i]);
  }
  dest[i] = '\0';
}

写工具库或者接口函数时挺推荐用这种思路,逻辑清晰,还能避免不必要的内存操作。

如果你正搞Windows Server 2019上配置 NAS 顺带在写点 C 工具代码,别忘了线程安全问题也会埋雷。像这篇在 Windows Server 2019 上配置 NAS 的指南就配套蛮实用的。

还有一点小提醒,函数重入问题不仅是 C 语言独有,像你用PHP NTS 版、搞OpenMP多线程,或者玩μC/OS-II移植时,也得注意这点。

pdf 文件大小:6.97MB