线程安全
线程到底会share哪些资源?
今天看到inet_ntoa
这种函数,我记得在glibc下,稍微新一点的,都应该是线程安全的,但是在openbsd下面发现并不一定。之前游双那本书里写的放到现在不全对了。
Drepper大佬在这个commit里修了这个问题。
但是apple能找到的部分,看起来还是没有改过…
c语言里有很多不想管理buffer的函数实现,返回char*, 内部就用一个static的buffer,然后返回这个buffer的地址。这样的话,就会导致线程不安全。(如果在栈上开就是悬垂)
如何避免此类误用非线程安全的函数
我建议使用clang-tidy,然后配合相关flag做检查。这样能够在使用clangd + 相关ide看代码的时候第一时间看到函数下的warning。
同时,如果你好好配置了clang-tidy,不要忽视clang-tidy的提示。。。
REF
This post is licensed under CC BY 4.0 by the author.