共享库本地变量线程安全吗?

时间:2014-08-26 09:30:45

标签: c linux multithreading thread-safety shared-libraries

我正在开发一个多线程应用程序,该应用程序将访问共享库,现在我看到共享库不包含任何全局变量,所以它是否意味着该库是线程安全的?例如。

我正在从各种线程调用函数func()到共享库,如:

主题1 - > FUNC()

主题2 - > FUNC()

...

线程N - > func()

并且func()定义如下,

void func(){
    int var;
    func2(&var);
}

在这种情况下,它是否是线程安全的?

2 个答案:

答案 0 :(得分:1)

您显示的用法是线程安全的,因为来自每个线程的func的调用将拥有自己的变量var的副本。

但这不是保证,原因如下:

  • 图书馆也需要谨慎使用static变量。如果您将int var替换为static int var,则func将不再是线程安全的
  • 你需要小心调用库。如果您的代码中出现了相同的模式,即如果您的代码在线程中共享局部变量,则代码将不是线程安全的。
  • 库可能使用非线程安全的函数,例如strtok。使用这些函数会使您的库不是线程安全的。

答案 1 :(得分:0)

是的,有问题的代码将在每个线程的上下文中执行,并且本地自动变量通常将存储在每个线程的堆栈中。