我正在用C语言开发文件系统。 FUSE是事件驱动系统,因此它将自己的操作码与用户的回调函数相匹配。 我知道C中的静态函数只表示范围限制 - 即如果静态函数f()是用foo.c编写的,它的符号范围只是foo.c而不是每个其他源文件。 但是我的团队成员说静态函数不是线程安全的,所以我们应该使回调非静态。(我们的系统必须在多线程环境中工作,所以它应该考虑并发。)
我整天用Google搜索,但我找不到它。我想问一下你对C中静态函数的线程安全性的认识或看法。
答案 0 :(得分:5)
static
关键字定义linkage to be internal。即它仅定义链接时该函数在其他编译单元中是否可见。它与函数是否是线程安全无关。
答案 1 :(得分:5)
声明函数static
不会改变它有关多线程的行为。该函数本身仍然是线程安全的,只要它不包含任何自修改代码。
您的同事可能会将静态函数与静态存储持续时间的变量混淆:声明为{{1}}的局部变量。这些确实会影响线程的安全性。
答案 2 :(得分:0)
正如其他一些人已经指出的那样,static
对线程安全没有任何作用。如果你想避免数据争用或其他与多线程相关的问题,我建议你研究一下互斥体。