非可重入函数在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移植时,也得注意这点。
文件大小:6.97MB
评论区