我有一个使用静态变量的函数。现在我需要在多线程应用程序中使用它。
char *
ether_ntoa(const struct ether_addr *n)
{
static char a[18];
return (ether_ntoa_r(n, a));
}
我可以使用__thread变量吗?
char *
ether_ntoa(const struct ether_addr *n)
{
__thread char a[18];
return (ether_ntoa_r(n, a));
}
我意识到我可以为ether_ntoa函数添加另一个参数,但是想知道这是否也能正常工作?
答案 0 :(得分:2)
是的,这可行,但保留static
说明符。来自gcc docs:
__thread说明符可以单独使用,也可以使用extern或static 说明符,但没有其他存储类说明符。使用时 extern或static,__ thread必须紧接着另一个出现 存储类说明符。
__thread说明符可以应用于任何全局的文件范围 静态,函数范围的静态或类的静态数据成员。它 可能不适用于块范围的自动或非静态数据 构件。