繁体   English   中英

static 自由函数线程安全吗?

[英]Are static free functions thread safe?

我正在编写一个多线程程序,并且有一个 function 将从多个线程调用,该线程是一个 cpp 文件中的 static 免费 function。 这个 function 永远不会从 cpp 文件外部调用,所以我想将其设为 static 以便它具有内部链接。

谷歌搜索我发现很多人说“静态函数不是线程安全的”但是当我 go 阅读它时,每个人似乎都在谈论 static 成员函数,而不是 ZA81259CEF8E959C624DF1D456E

static 自由函数是否线程安全(假设它们不访问线程之间的任何共享 state)?

任何不访问共享 state 的 function 本质上都是线程安全的。 只有当您对共享 state 进行未受保护的读/写操作时,您才会遇到数据竞争。 如果没有共享的 state,则不能进行数据竞争。

这就是为什么纯函数式语言自然是线程安全的。 如果 function 没有副作用,那么您可以在任意数量的线程中调用它。

Static 功能与其他功能相同。 这不是 function,而是 function 所做的。

我认为有些人在术语之间混淆。 static function 与 function 与 ZA81259CEF8E959C2297DF1D456E5D 变量。

虽然 static function 可能安全与否,但带有 ZA81259CEF8565D 变量的 function 是不安全的。

这种 function 的一个示例是strtok ,它在 static 变量中保存连续点。 当多个线程使用旧的strtok时,可能会导致输入之间的混合。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM