非可重入函数在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
文件大小:
评论区