静态自由函数线程安全吗?

tjw*_*992 1 c++ static multithreading

我正在编写一个多线程程序,并且有一个函数可以从多个线程调用,该函数是 cpp 文件中的静态自由函数。这个函数永远不会从 cpp 文件外部调用,所以我想让它成为静态的,以便它有内部链接。

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

静态自由函数线程安全吗(假设它们不访问线程之间的任何共享状态)?

Nat*_*ica 8

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

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


SHR*_*SHR 5

静态函数与其他函数相同。这不是功能,而是功能的作用。

我认为有些人在术语之间混用。静态函数与具有静态变量的函数。

虽然静态函数可能安全或不安全,但带有静态变量的函数在没有同步的情况下是不安全的。

此类函数的一个示例是strtok将继续点保留在静态变量中。当多个线程使用 old 时strtok,可能会导致输入之间的混合。