我已经声明了一个变量:
静态__thread int a;
我收到以下错误:
致命错误 (dcc:1796):在指定的目标环境中不支持 __thread
我该如何解决这个问题?我应该在make文件中启用一些标志吗?
我正在使用 windriver 编译器(为 powerpc 编译)。我提到了类似的问题,但无法弄清楚。
基本上我正在尝试制作可重入功能。任何建议都会有很大帮助。
包含 pthread.h 有什么我可以做的吗?
谢谢。
我已经声明了一个变量:
静态__thread int a;
我收到以下错误:
致命错误 (dcc:1796):在指定的目标环境中不支持 __thread
我该如何解决这个问题?我应该在make文件中启用一些标志吗?
我正在使用 windriver 编译器(为 powerpc 编译)。我提到了类似的问题,但无法弄清楚。
基本上我正在尝试制作可重入功能。任何建议都会有很大帮助。
包含 pthread.h 有什么我可以做的吗?
谢谢。
__thread 是 gcc 扩展,它不适用于所有平台。如上所述,您可以使用 pthread_setspecific/pthread_getspecific,有一个来自 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
是一个扩展。完成类似事情的 POSIX 线程接口是 pthread_getspecific
和 pthread_setspecific