我正在开发一个多线程应用程序,该应用程序将访问共享库,现在我看到共享库不包含任何全局变量,所以它是否意味着该库是线程安全的?例如。
我正在从各种线程调用函数func()
到共享库,如:
主题1 - > FUNC()
主题2 - > FUNC()
...
线程N - > func()
并且func()定义如下,
void func(){
int var;
func2(&var);
}
在这种情况下,它是否是线程安全的?
答案 0 :(得分:1)
您显示的用法是线程安全的,因为来自每个线程的func
的调用将拥有自己的变量var
的副本。
但这不是保证,原因如下:
static
变量。如果您将int var
替换为static int var
,则func
将不再是线程安全的strtok
。使用这些函数会使您的库不是线程安全的。答案 1 :(得分:0)
是的,有问题的代码将在每个线程的上下文中执行,并且本地自动变量通常将存储在每个线程的堆栈中。