__thread可以用于局部变量

时间:2015-08-11 20:47:55

标签: c

我有一个使用静态变量的函数。现在我需要在多线程应用程序中使用它。

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函数添加另一个参数,但是想知道这是否也能正常工作?

1 个答案:

答案 0 :(得分:2)

是的,这可行,但保留static说明符。来自gcc docs

  

__thread说明符可以单独使用,也可以使用extern或static   说明符,但没有其他存储类说明符。使用时   extern或static,__ thread必须紧接着另一个出现   存储类说明符。

     

__thread说明符可以应用于任何全局的文件范围   静态,函数范围的静态或类的静态数据成员。它   可能不适用于块范围的自动或非静态数据   构件。