线程本地存储 (TLS) - 编译器错误

发布于 2024-11-08 15:30:18 字数 300 浏览 0 评论 0原文

我声明了一个变量:

static __thread int a;

我收到以下错误:

fatal error (dcc:1796): 指定的目标环境不支持 __thread

我该如何解决此问题?我应该在 make 文件中启用一些标志吗?

我正在使用 windriver 编译器(为 powerpc 编译)。我提到了类似的问题,但无法弄清楚。

基本上我正在尝试制作可重入函数。任何建议都会有很大帮助。

我可以通过包含 pthread.h 来做什么吗?

谢谢。

I have declared a variable:

static __thread int a;

I am getting the following error:

fatal error (dcc:1796): __thread not supported in the specified target environment

How can I resolve this? Should I enable some flags in make file?

I am on windriver compiler(compiling for powerpc). I referred to similar questions but unable to figure out.

Basically I am trying to make re-entrant functions. Any suggestion would be of great help.

Is there anything I can by including pthread.h?

Thanks.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

信愁 2024-11-15 15:30:18

__thread 是 gcc 扩展,它不适用于所有平台。如上所述,您可以使用 pthread_setspecic/ pthread_getspecic,有一个来自 man 的示例:

          /* Key for the thread-specific buffer */
          static pthread_key_t buffer_key;

          /* Once-only initialisation of the key */
          static pthread_once_t buffer_key_once = PTHREAD_ONCE_INIT;

          /* Allocate the thread-specific buffer */
          void buffer_alloc(void)
          {
            pthread_once(&buffer_key_once, buffer_key_alloc);
            pthread_setspecific(buffer_key, malloc(100));
          }

          /* Return the thread-specific buffer */
          char * get_buffer(void)
          {
            return (char *) pthread_getspecific(buffer_key);
          }

          /* Allocate the key */
          static void buffer_key_alloc()
          {
            pthread_key_create(&buffer_key, buffer_destroy);
          }

          /* Free the thread-specific buffer */
          static void buffer_destroy(void * buf)
          {
            free(buf);
          }

但是正如我看到的,您正在尝试创建可重入函数,可重入函数不应该保存静态非常量数据。

__thread is gcc extension which is not working on all platform. As mentioned above you could use pthread_setspecific/ pthread_getspecific, there is an example from man:

          /* Key for the thread-specific buffer */
          static pthread_key_t buffer_key;

          /* Once-only initialisation of the key */
          static pthread_once_t buffer_key_once = PTHREAD_ONCE_INIT;

          /* Allocate the thread-specific buffer */
          void buffer_alloc(void)
          {
            pthread_once(&buffer_key_once, buffer_key_alloc);
            pthread_setspecific(buffer_key, malloc(100));
          }

          /* Return the thread-specific buffer */
          char * get_buffer(void)
          {
            return (char *) pthread_getspecific(buffer_key);
          }

          /* Allocate the key */
          static void buffer_key_alloc()
          {
            pthread_key_create(&buffer_key, buffer_destroy);
          }

          /* Free the thread-specific buffer */
          static void buffer_destroy(void * buf)
          {
            free(buf);
          }

But as I see you are trying to make re-entrant functions, reentrant function should not hold static non-constant data.

柏拉图鍀咏恒 2024-11-15 15:30:18

__thread 是一个扩展。完成类似事情的 POSIX 线程接口是 pthread_getspecificpthread_setspecific

__thread is an extension. The POSIX thread interfaces to accomplish similar things are pthread_getspecific and pthread_setspecific

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文